1. 程式人生 > >linux下主從同步和redis的用法

linux下主從同步和redis的用法

mariadb其實就是mysql

mysql已經被oracle收購,它即將閉源,馬上要開始收費了
因此還想免費試用開源的資料庫mysql,就在centos7上,將mysql分支為mariadb


安裝mariadb,在centos7底下:
linux軟體包的格式 mysql.rpm

1.通過yum去安裝
1.linux的yum軟體管理目錄在 /etc/yum.repos.d
2.在這個目錄底下,主要是*.repo這個檔案,就會被識別為yum原始檔

第一種方式是,通過阿里雲的yum源去下載(第三方的yum源,可能會版本較低,且軟體不全,可能找不到)
CentOS-Base.repo epel.repo

yum install mariadb-server #yum安裝mariadb 因為這個阿里雲特別快,咱們用他去學習,加速下載 300kb/s

mariadb-server x86_64 1:5.5.60-1.el7_5 base 11 M
為依賴而安裝:
mariadb x86_64 1:5.5.60-1.el7_5 base 8.9 M
perl-DBD-MySQL x86_64 4.023-6.el7 base 140 k
為依賴而更新:
mariadb-libs x86_64 1:5.5.60-1.el7_5 base 758 k

 


第二種方式是,通過mariadb官方的yum源去下載(一定是這個軟體最正確的yum源,且包都是最新的)
1.下載一個第三方的軟體,順序就是去官網找到這個軟體的下載方式


yum install MariaDB-server MariaDB-client #區分大小寫 ,這個方式是取國外下載mariadb,速度太慢 30kb/s

依賴關係解決

=====================================================================================================================================
Package 架構 版本 源 大小
=====================================================================================================================================
正在安裝:
MariaDB-client x86_64 10.1.37-1.el7.centos mariadb 40 M
MariaDB-server x86_64 10.1.37-1.el7.centos mariadb 104 M
MariaDB-shared x86_64 10.1.37-1.el7.centos mariadb 1.3 M
替換 mariadb-libs.x86_64 1:5.5.56-2.el7
為依賴而安裝:
MariaDB-common x86_64 10.1.37-1.el7.centos mariadb 123 k
boost-program-options x86_64 1.53.0-27.el7 base 156 k
galera x86_64 25.3.24-1.rhel7.el7.centos mariadb 8.1 M



1.下載mariadb,通過阿里雲的源
yum install mariadb-server

2.通過yum安裝的軟體,systemctl start/stop/restart/status mariadb

systemctl start mariadb #啟動mariadb資料庫

3.初始化mariadb
mysql_secure_installation #直接輸入這個命令,設定root密碼,刪除匿名使用者等等操作

4.配置myariadb遠端登入,可以通過windows,pycharm等客戶端進行連線,在遠端登入的話,就必須得輸入redhat這個密碼

grant all privileges on *.* to [email protected]'%' identified by 'redhat';

授予 所有的 許可權 在 所有的庫.所有的表 使用者名稱@"所有的地址" identified by "密碼";

5.重新整理授權表,使得許可權立即生效
flush privileges;

6.更改mysql的密碼
set password = PASSWORD('redhat123');

7.建立普通使用者s14
create user [email protected]'%' identified by 's14666';

8.查詢使用者資訊
select host,user,password from user;

9.授權語句
grant 許可權 on 資料庫.表名 to 賬戶@主機名 對特定資料庫中的特定表授權
grant 許可權 on 資料庫.* to 賬戶@主機名   對特定資料庫中的所有表給與授權
grant 許可權1,許可權2,許可權3 on *.* to 賬戶@主機名    對所有庫中的所有表給與多個授權
grant all privileges on *.* to 賬戶@主機名    對所有庫和所有表授權所有許可權
grant create,select,insert on *.* to [email protected]'%' identified by "密碼"

10.資料庫的中文設定
1.檢視資料庫編碼
\s
2.修改mysql的配置檔案 /etc/my.cnf ,加入以下資訊

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

3.修改了配置檔案,重啟服務
systemctl restart mariadb

4.檢視資料庫建立的編碼,只有在更新了資料庫編碼之後,建立的資料庫,才會使用這個編碼
show create database s16;

5.可以測試建立table,寫入中文資料

11.mysql的資料備份
1.通過命令匯出全部資料
mysqldump -u root -p --all-databases > /data/db.dump

2.可以測試刪除一些無關緊要的db,例如s14,test這樣的資料


3.匯入資料庫的db檔案,在mysql命令列中輸入這個命令
mysql > source /opt/db.dump #這一步是輸入的sql語句,在mysql中輸入,匯入資料

4.第二種方式匯入資料,通過mysql命令
mysql -uroot -p < /opt/db.dump

mysql主從複製的步驟:

環境準備:
準備兩臺伺服器,安裝兩個mariadb

主庫是:192.168.12.96 mater
從庫是:192.168.12.87 slave

 

主庫的操作如下:
1.開啟binlog功能,修改/etc/my.cnf
vim /etc/my.cnf #寫入

[mysqld]
server-id=1 #指明主庫的身份id為1
log-bin=mysqls14-bin #指明binlog的日誌名

2.修改了配置檔案,重啟mariadb,使得binlog生效
systemctl restart mariadb

3.登入mysql,檢查主庫的狀態
show master status;

4.建立一個使用者,用於進行主從同步
create user 'kangchen'@'%' identified by 'kangchen666';

5.授予賬號許可權,授予一個從庫的身份許可權
grant replication slave on *.* to 'kangchen'@'%';

6.鎖定mysql的表,防止資料寫入
flush table with read lock;

7.主從同步,將從庫與主庫的資料,保持一致後,它倆都在同一個起跑線,然後解除鎖表,一同寫入資料,保證資料一致性
1.匯出當前的資料,用於slave機器匯入資料,保證在一個起始點
mysqldump -u root -p --all-databases > /data/db.dump
2.將此db.dump檔案遠端傳輸給 slave機器,用於匯入
scp /data/db.dump [email protected]:/tmp/
3.登入slave從庫,匯入主庫的資料資訊
mysql > source /tmp/db.dump
4.檢視主庫和從庫的資訊,是否一致


8.檢視主庫的狀態資訊,binlog資訊
show master status;

9.解鎖表,開始主從同步
unlock tables;

 

從庫的設定:

1.在/etc/my.cnf當中開啟server-id
vim /etc/my.cnf

2.重啟myariadb

3.檢視slave機器的身份資訊
show variables like 'server_id';
show variables like 'log_bin';

4.通過命令,開啟主從同步技術
change master to master_host='192.168.12.96',
master_user='kangchen',
master_password='kangchen666',
master_log_file='mysqls14-bin.000001',
master_log_pos=671;

5.開啟slave
start slave;

6.檢查slave狀態,檢查兩條引數,如果都是yes,即主從ok
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


7.此時可以在主庫中寫入資料,檢視從庫中是否生成了記錄

主庫:插入資料

從庫:檢查資料

 

Mariadb 的sql:


create database s14;
create table s14tb(id int,name char);
insert into s14tb (id ,name) values(1,"s14")



drop database s14;
drop table s14tb; #刪除整張表
delete from s14tb;

 


update

 



select id,name,addr from table;


redis相關配置
1.yum 原始碼 rpm
yum 快速,間接,高效,解決依賴關係,(自動安裝到某個路徑,不可控),通過yum安裝的軟體查詢命令
rpm -ql nginx
yum源的軟體包可能版本非常低

原始碼安裝,可擴充套件第三方的功能(可以指定目錄安裝, configure --prefix=/opt/python36/)
可以通過官網的最新程式碼,進行編譯安裝


通過原始碼安裝
1.線上下載redis原始碼包
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2.解壓縮redis原始碼包,如果原始碼包帶有.gz結尾,需要通過gzip指令擴充套件,也就是-z的引數
tar -zxvf redis-4.0.10.tar.gz #解壓縮這個檔案,且顯示解壓縮過程
3.切換目錄到redis原始碼包
cd redis-4.0.10
4.由於redis沒有configure指令碼,直接就有了makefile,因此可以直接編譯且安裝
make #編譯
make install #安裝
#此兩條命令可以縮寫為一條, make && make install
5.編譯安裝完成後,redis預設會將redis命令新增到環境變數中/usr/local/bin底下
6.啟動redis服務端,自定義一個redis.conf
vim redis.conf ,寫入以下內容(不要加上註釋)
port 6379
daemonize no #後臺執行redis
pidfile /data/6379/redis.pid #將redis程序的id寫入到redis.pid這個檔案
loglevel notice #日誌級別
logfile "/data/6379/redis.log"
dir /data/6379 #配置redis資料存放點
protected-mode yes #redis3.0之後的安全模式
requirepass qiangdademima #給redis新增密碼

redis的安全模式,可能會阻擋你遠端連線,為了解決這個安全模式,給redis設定一個密碼

7.redis的多例項功能,可以在一個機器上,啟動多個redis服務端
1.準備一個新的配置檔案,redis預設支援多例項,再準備一個新的配置檔案redis-6380.conf,內容如下:
port 6380
bind 0.0.0.0
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dir /data/6380
protected-mode yes
requirepass zeiqiangdademima
2.啟動第二個redis例項(第二個資料庫)
redis-server redis-6380.conf

8.通過命令查詢redis的密碼引數
CONFIG get requirepass

 

redis釋出訂閱

1.一個釋出者,多個訂閱者
2.支援正則的匹配訂閱者


-a 引數意思是指定redis的密碼登入
redis-cli -a qiangdademima #啟動1個redis客戶端 (訂閱者1)
SUBSCRIBE 頻道名字
PSUBSCRIBE 頻道名*

redis-cli -a qiangdademima #啟動2個redis客戶端(訂閱者2)
SUBSCRIBE 頻道名字
PSUBSCRIBE 頻道名*

redis-cli -a qiangdademima #啟動3個redis客戶端(釋出者)
PUBLISH 頻道名字 想傳送的訊息
PUBLISH 頻道名字* 傳送的訊息


redis持久化之rdb與aof

rdb模式
1.在配置檔案中寫入引數,支援rdb模式
vim redis.conf

port 6379
bind 0.0.0.0
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dir /data/6379
protected-mode yes
requirepass qiangdademima
dbfilename dbmp.rdb
save 900 1
save 300 10
save 60 10000

2.啟動redis服務端,此時可以設定redis的key,通過save命令觸發rdb持久化

 

aof模式

1.vim redis.conf #寫入以下

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dbmp.rdb
requirepass redhat
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec

2.啟動redis-server服務端,預設就會生成appendonly.aof持久化檔案
此時進入redis-cli的操作,都會被記錄,且追加到appendonly.aof檔案中,以達到持久化的操作


redis 持久化方式有哪些?有什麼區別?

rdb:基於快照的持久化,速度更快,一般用作備份,主從複製也是依賴於rdb持久化功能

aof:以追加的方式記錄redis操作日誌的檔案。可以最大程度的保證redis資料安全,類似於mysql的binlog