您好,登錄后才能下訂單哦!
mysql AB復制:
三臺主機:MASTER IP:172.25.35.21
SLAVE1 IP:172.25.35.22
SLAVE2 IP:172.25.35.19
MYSQL版本:mysql5.7
下載安裝包
mysql-community-client-5.7.11-1.el6.x86_64.rpm
mysql-community-common-5.7.11-1.el6.x86_64.rpm
mysql-community-libs-5.7.11-1.el6.x86_64.rpm
mysql-community-libs-compat-5.7.11-1.el6.x86_64.rpm
mysql-community-server-5.7.11-1.el6.x86_64.rpm
安裝
yum install * -y 安裝所有
啟動 mysql 5.7版本啟動時會隨機生成root初始密碼
cat /var/log/mysqld.log | grep password 過濾出初始密碼
初始密碼為:wy+egrCeB1Ul
mysql_secure_installation 初始化數據庫
更改數據庫root密碼 5.7版本要求密碼包括大寫和小寫字母、特殊符號、數字
Mysql -uroot -p 用新更改的密碼登陸
在master主機上:
vim /etc/my.cnf
添加:
server-id=1
log-bin=mysql-bin
binlog-do-db=moto 同步的數據庫為moto
binlog-ignore-db=mysql 不同步 mysql
/etc/init.d/mysqld restart 每次更改完my.cnf 文件要重起mysqld
登陸mysql
mysql> CREATE DATABASE moto; 添加數據庫
mysql> SHOW DATABASES; 查看數據庫
mysql> GRANT REPLICATION SLAVE ON *.* TO pop@'172.25.35.22' IDENTIFIED BY 'Poiu@123'; 給slave1 主機172.25.35.22 授權 可以用pop用戶 登陸
Mysql> SHOW MASTER STATUS; 查看MASTER 狀態
記下file名與position號
在slave1主機上
用pop用戶登陸驗證授權是否成功
[root@mysql2 mysql]# mysql -h 172.25.35.21 -u pop -p
Enter password: 輸入pop用戶密碼
mysql> SHOW DATABASES;
vim /etc/my.cnf
添加:
server-id=2
/etc/init.d/mysqld restart 重起數據庫
登陸slave1主機的mysql
mysql> CREATE DATABASE moto; 同步之前要保證master與slave主機的數據庫信息一致所以為slave1創建moto數據庫
mysql>CHANGE MASTER TO MASTER_HOST=’172.25.35.21’,MASTER_USER=’pop’,
MASTER_PASSWORD=’Poiu@123’,MASTER_LOG_FILE=‘mysql-bin.000002’,MASTER_LOG_POS=1817;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G; 查看slave狀態
看到的信息與剛才設置的相同;
看到IO/SQL 為yes 表示正常
測試:
在master主機數據庫中
mysql>USE moto;
mysql>CREATE TABLE GP( NUM VARCHAR(15) NOT NULL,TEAM VARCHAR(25) NOT NULL); 創建表GP
mysql> INSERT INTO GP VALUES('93','HONDA'); 給表中添加信息
mysql> INSERT INTO GP VALUES('46','YAMAHA');
在slave1主機上
登陸數據庫
mysql>USE moto;
mysql> SELECT * FROM GP;
可以看到master剛才添加的信息已經同步到了slave主機上
單向同步完成
單向master> slave1>slave2
原理:master 作為slave1的master,slave1又作為slave2的master,逐級同步 slave2只同步slave1上的 數據而不是直接去master上取數據
配置:
保持master不變、添加slave2 172.25.35.19 主機
在slave2上安裝需要的軟件,啟動,并更改數據庫root用戶密碼
vim /etc/my.cnf
添加:
server-id=3 每臺主機的server-id都是唯一的、開啟美表一個文件功能
重啟mysqld
####不要忘記,作同步的主機、初始的數據庫狀態必須保持一致,在配置slave2之前先將master上的數據庫數據先復制一份給slave2并導入數據庫中
在master上
mysqldump -u root -p moto > moto.back 將moto數據庫的信息備份一份出來
scp moto.back 172.25.35.19:/mnt 拷貝一份到slave2上
在slave2上
mysql -uroot -p moto < /mnt/moto.back 將備份的導入數據庫中 注意slave2本地數據庫重要先創建moto數據庫 這時slave2與master數據庫信息一致
在slave1上
vim /etc/my.cnf
添加:
log-bin=mysql-bin 定義二進制日志
binlog-do-db=moto
binlog-ignore-db=mysql
log-slave-updates
保存后重啟mysqld服務
登陸數據庫
授權:
mysql> GRANT REPLICATION SLAVE ON *.* TO pop@'172.25.35.19' IDENTIFIED BY 'Poiu@123'; 給slave2 主機授權
mysql>SHOW MASTER STATUS;
在slave2主機上
進入數據庫:
mysql> CHANGE MASTER TO MASTER_HOST='172.25.35.21',MASTER_USER='pop',MASTER_PASSWORD='Poiu@123',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=447; 指定同步數據的master主機是172.25.35.21
mysql>START SLAVE;
mysql>SHOW SLAVE STATUS\G;
看到IO/SQL 為yes 并且沒有報錯說明成功
當在master端改變數據庫信息時、可以看到slave1和slave2主機信息都在發生改變
GTID AB復制:
使用master跟slave1
在master上:
Vim /etc/my.cnf
添加:
gtid-mode=on 打開gtid模塊
Enforc e-gtid-consistency=on
在slave1上
Vim /etc/my.cnf
注釋掉剛才作為master時添加的:
#log-bin=mysql-bin
#binlog-do-db=westos
#binlog-ignore-db=mysql
#log-slave-updates
添加:
gtid-mode=on 打開gtid模塊
Enforc e-gtid-consistency=on 設置強行同步,保證主從數據的一致性
兩臺主機上重啟mysqld
用GTID的AB復制需要重新做change master操作
在slave1上
進入數據庫執行
mysql> change master to master_host='172.25.35.21',master_user='pop',master_password='Poiu@123',master_auto_position=1;
在master上
進入數據庫給共享數據庫的表中做兩次添加操作后可以看到slave1上
GTID 多線程復制:
在slave1上:
Vim /etc/my.cnf
添加:
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16 指定線程數 官方推薦為16 0表示不使用多線程而是使用AB復制
master_info_repository=TABLE
relay_log_info_repository=TABLE
/etc/init.d/mysqld restart 每次更改文件后要重啟數據庫
登陸數據庫
mysql> show processlist
會看到有十六個線程。mysql5.7的多線程并行復制、解決了mysql以前為人詬病的復制延遲的問題,使從機的復制效率大大提升。
****當同步做好后slave主機上的數據不能更改、只能更改master的數據
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。