線上不停機部署mysql主從


不影響主庫業務情況下構建主從復制步驟

非gtid模式下

更改主庫my.cnf

server-id=1
binlog-format = mixed
log-bin=mysql-bin
datadir=/var/lib/mysql
innodb_flush_log_at_trx_commit=1
sync_binlog=1

主庫授權賬號復制權限

GRANT REPLICATION SLAVE ON *.* TO replicant@% IDENTIFIED BY '<<choose-a-good-password>>'

使用binlog位置創建備份文件。它會影響數據庫服務器的性能,但不會鎖定表:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A > ~/dump.sql

檢查文件的頭部並記下MASTER_LOG_FILE和MASTER_LOG_POS的值

head dump.sql -n80 | grep "MASTER_LOG_POS"
修改從庫my.cnf
server-id = 101
binlog-format = mixed
log_bin = mysql-bin
relay-log = mysql-relay-bin
log-slave-updates = 1
read-only = 1

重啟mysql

導入sql文件

mysql -u root -p < ~/dump.sql

從庫設置主庫信息:

CHANGE MASTER TO MASTER_HOST='192.168.0.20',MASTER_PORT=5306,MASTER_USER='slave',MASTER_PASSWORD='VsaN4Z8mtE', MASTER_LOG_FILE='slave-bin.000034',MASTER_LOG_POS=271;
start slave;

show slave status;

 

如果一切正常,則Last_Error將為空,Slave_IO_State將報告“等待主發送事件”。尋找Seconds_Behind_Master,它表明它背后有多遠。

## gtid模式下

### 修改my.cnf

server-id = 123456789 //服務 ID,主從實例 server-id 需不同。
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
replicate-do-db = exampledb //需要同步的數據庫
replicate-ignore-db = mysql //不需要同步的數據庫
replicate-ignore-db = information_schema //不需要同步的數據庫
replicate-ignore-db = performance_schema //不需要同步的數據庫

#GTID
gtid_mode=on
enforce_gtid_consistency=on
binlog_format=row //設置 binlog 為 row
log-slave-updates=1

 

重啟mysql

從庫授權:

 

change master to master_host = 'masterhost.mysql.rds.aliyuncs.com', master_port = 3306, master_user = 'catest', master_password='masterpassword', master_auto_position = 1;

導出主庫sql文件

 

mysqldump -hmasterIP -ucopyuser -p -P3306 --single-transaction --set-gtid-purged=ON testdb > ~/dump.sql

 

執行sql文件,導入數據

mysql -uroot -p visdb <~/dump.sql

 

啟動slave

 

start slave;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM