在實現mysql主從架構的過程中,可以使用基于mysqldump方式來構建主從。mysqldump在備份的過程中已經產生了GTID的相關信息,即這些GTID可以跳過,對于未跳過的GTID則有IO線程復制到從服務器,由SQL線程進行執行。本文主要演示mysqldump在GTID模式下搭建mysql主從。
有關知識點參考:
配置MySQL GTID 主從復制
基于mysqldump快速搭建從庫
使用mysqldump導出數據庫
一、GTID添加從庫的方法
1.如果master所有的binlog還在,安裝slave后,直接change?master?到master 原理是直接獲取master所有的gtid并執行 優點是簡單 缺點是如果binlog太多,數據完全同步需要的時間較長,并且需要master一開始就啟用了GTID 總結:適用于master也是新建不久的情況 2.通過master或者其它slave的mysqldump備份搭建新的slave. 原理:備份時獲取master的數據和這些數據對應的GTID,在Slave端跳過備份包含的GTID 優點是可以避免第一種方法中的不足 缺點操作相對復雜 總結:適用于擁有較大數據集的情況 3、percona?xtrabackup 基于xtrabackup備份文件xtrabackup_binlog_info包含了GTID信息 做從庫恢復后,需要手工設置:set@@GLOBAL.GTID_PURGED='c8d960f1-83ca-11e5-a8eb-000c29ea831c:1-745497';恢復后,執行change?master?to 缺點操作相對復雜 總結:適用于擁有較大數據集的情況
二、演示從庫搭建
1、演示環境 mysql>?system?cat?/etc/redhat-release CentOS?release?6.7?(Final)mysql>?show?variables?like?'version'; +---------------+------------+|?Variable_name?|?Value??????| +---------------+------------+|?version???????|?5.7.12-log?| +---------------+------------+主服務器:192.168.1.245:3306??server_id?:?245 從服務器:192.168.1.247:3306??server_id?:?247 --在主庫端創建復制用戶 mysql>?GRANT?REPLICATION?SLAVE,?REPLICATION?CLIENT?ON?*.*?TO?'repl'@'%'?IDENTIFIED?BY?'123456';? 2、直接使用change?master(針對本文第一部分,第1小點情形) 此處省略基于gtid配置的參數描述,具體可以參考:配置MySQL?GTID?主從復制 在從服務器端直接change?master,如下:SLAVE>?show?variables?like?'server_id'; +---------------+-------+|?Variable_name?|?Value?| +---------------+-------+|?server_id?????|?247???| +---------------+-------+Slave>?CHANGE?MASTER?TO?? ????->?MASTER_HOST='192.168.1.245',????????->?MASTER_USER='repl',????????->?MASTER_PASSWORD='123456',????????->?MASTER_PORT=3306,????????->?MASTER_AUTO_POSITION?=?1;Query?OK,?0?rows?affected,?2?warnings?(0.12?sec) Slave>?start?slave; Query?OK,?0?rows?affected?(0.01?sec) Slave>?start?slave; Query?OK,?0?rows?affected?(0.01?sec) Slave>?show?slave?status?G***************************?1.?row?***************************???????????????Slave_IO_State:?Waiting?for?master?to?send?event??????????????????Master_Host:?192.168.1.245??????????????????Master_User:?repl??????????????????Master_Port:?3306????????????????Connect_Retry:?60??????????????Master_Log_File:?node3-binlog.000001??????????Read_Master_Log_Pos:?457???????????????Relay_Log_File:?node5-relay-bin.000002????????????????Relay_Log_Pos:?676????????Relay_Master_Log_File:?node3-binlog.000001?????????????Slave_IO_Running:?Yes????????????Slave_SQL_Running:?Yes??????????????...............--主服務器端操作如下 Master>?create?database?tempdb; Query?OK,?1?row?affected?(0.02?sec) Master>?use?tempdb Database?changed Master>?create?table?t1(id?int,ename?varchar(20)); Query?OK,?0?rows?affected?(0.09?sec) Master>?insert?into?t1?values(1,'leshami'); Query?OK,?1?row?affected?(0.08?sec) --從服務器端驗證Slave>?select?*?from?tempdb.t1; +------+---------+|?id???|?ename???| +------+---------+|????1?|?leshami?| +------+---------+1?row?in?set?(0.01?sec) 3、基于mysqldump搭建gtid從庫? --準備環境,從庫端執行 Slave>?stop?slave;??????????--停止重庫 Query?OK,?0?rows?affected?(0.01?sec) Slave>?reset?slave?all;?????--重置主從配置信息 Query?OK,?0?rows?affected?(0.02?sec)??? --準備環境,主庫端執行?? Master>?source?sakila-db/sakila-schema.sql??--導入mysql自帶的sakila數據庫 Master>?source?sakila-db/sakila-data.sql????--填充數據??? --使用mysqldump導出數據庫?? #?mysqldump?--all-databases?--single-transaction?--triggers?--routines?--events? >?--host=localhost?--port=3306?--user=root?--password=MyP@ssw0rd?>/tmp/alldb.sql???????? --導出的文件中已經包含了GTID_PURGED的信息 #?grep?GTID_PURGED?/tmp/alldb.sql??? SET?@@GLOBAL.GTID_PURGED='78336cdc-8cfb-11e6-ba9f-000c29328504:1-38';--將備份文件copy到從服務器 #?scp?/tmp/alldb.sql?192.168.1.247:/tmp--?執行reset?master,重置從服務器上的binlog Slave>?reset?master; Query?OK,?0?rows?affected?(0.03?sec) Slave>?source?/tmp/alldb.sqlSlave>?show?databases;????--此時tempdb已產生 +--------------------+|?Database???????????| +--------------------+|?information_schema?| |?mysql??????????????| |?performance_schema?| |?sakila?????????????| |?sys????????????????||?tempdb?????????????| +--------------------+--執行change?master Slave>?CHANGE?MASTER?TO?? ????->?MASTER_HOST='192.168.1.245',????????->?MASTER_USER='repl',????????->?MASTER_PASSWORD='123456',????????->?MASTER_PORT=3306,????????->?MASTER_AUTO_POSITION?=?1;Query?OK,?0?rows?affected,?2?warnings?(0.06?sec) Slave>?start?slave; Query?OK,?0?rows?affected?(0.00?sec) Slave>?show?slave?status?G***************************?1.?row?***************************???????????????Slave_IO_State:?Waiting?for?master?to?send?event??????????????????Master_Host:?192.168.1.245??????????????????Master_User:?repl??????????????????Master_Port:?3306????????????????Connect_Retry:?60??????????????Master_Log_File:?node3-binlog.000001??????????Read_Master_Log_Pos:?25637???????????????Relay_Log_File:?node5-relay-bin.000002????????????????Relay_Log_Pos:?423????????Relay_Master_Log_File:?node3-binlog.000001?????????????Slave_IO_Running:?Yes????????????Slave_SQL_Running:?Yes--主庫端執行一些事務 Master>?alter?table?tempdb.t1?modify?ename?varchar(50); Query?OK,?0?rows?affected?(0.05?sec) Records:?0??Duplicates:?0??Warnings:?0 Master>?insert?into?tempdb.t1?values(2,'http://blog.csdn.net/leshami'); Query?OK,?1?row?affected?(0.02?sec) --從庫端驗證結果Slave>?desc?tempdb.t1; +-------+-------------+------+-----+---------+-------+|?Field?|?Type????????|?Null?|?Key?|?Default?|?Extra?| +-------+-------------+------+-----+---------+-------+|?id????|?int(11)?????|?YES??|?????|?NULL????|???????||?ename?|?varchar(50)?|?YES??|?????|?NULL????|???????| +-------+-------------+------+-----+---------+-------+2?rows?in?set?(0.00?sec)Slave>?select?*?from?tempdb.t1; +------+------------------------------+|?id???|?ename????????????????????????| +------+------------------------------+|????1?|?leshami??????????????????????||????2?|?http://www.php.cn/?| +------+------------------------------+
在實現mysql主從架構的過程中,可以使用基于mysqldump方式來構建主從。mysqldump在備份的過程中已經產生了GTID的相關信息,即這些GTID可以跳過,對于未跳過的GTID則有IO線程復制到從服務器,由SQL線程進行執行。本文主要演示mysqldump在GTID模式下搭建mysql主從。
有關知識點參考:
配置MySQL GTID 主從復制
基于mysqldump快速搭建從庫
使用mysqldump導出數據庫
一、GTID添加從庫的方法
1.如果master所有的binlog還在,安裝slave后,直接change?master?到master 原理是直接獲取master所有的gtid并執行 優點是簡單 缺點是如果binlog太多,數據完全同步需要的時間較長,并且需要master一開始就啟用了GTID 總結:適用于master也是新建不久的情況 2.通過master或者其它slave的mysqldump備份搭建新的slave. 原理:備份時獲取master的數據和這些數據對應的GTID,在Slave端跳過備份包含的GTID 優點是可以避免第一種方法中的不足 缺點操作相對復雜 總結:適用于擁有較大數據集的情況 3、percona?xtrabackup 基于xtrabackup備份文件xtrabackup_binlog_info包含了GTID信息 做從庫恢復后,需要手工設置:set@@GLOBAL.GTID_PURGED='c8d960f1-83ca-11e5-a8eb-000c29ea831c:1-745497';恢復后,執行change?master?to 缺點操作相對復雜 總結:適用于擁有較大數據集的情況
二、演示從庫搭建
1、演示環境 mysql>?system?cat?/etc/redhat-release CentOS?release?6.7?(Final)mysql>?show?variables?like?'version'; +---------------+------------+|?Variable_name?|?Value??????| +---------------+------------+|?version???????|?5.7.12-log?| +---------------+------------+主服務器:192.168.1.245:3306??server_id?:?245 從服務器:192.168.1.247:3306??server_id?:?247 --在主庫端創建復制用戶 mysql>?GRANT?REPLICATION?SLAVE,?REPLICATION?CLIENT?ON?*.*?TO?'repl'@'%'?IDENTIFIED?BY?'123456';? 2、直接使用change?master(針對本文第一部分,第1小點情形) 此處省略基于gtid配置的參數描述,具體可以參考:配置MySQL?GTID?主從復制 在從服務器端直接change?master,如下:SLAVE>?show?variables?like?'server_id'; +---------------+-------+|?Variable_name?|?Value?| +---------------+-------+|?server_id?????|?247???| +---------------+-------+Slave>?CHANGE?MASTER?TO?? ????->?MASTER_HOST='192.168.1.245',????????->?MASTER_USER='repl',????????->?MASTER_PASSWORD='123456',????????->?MASTER_PORT=3306,????????->?MASTER_AUTO_POSITION?=?1;Query?OK,?0?rows?affected,?2?warnings?(0.12?sec) Slave>?start?slave; Query?OK,?0?rows?affected?(0.01?sec) Slave>?start?slave; Query?OK,?0?rows?affected?(0.01?sec) Slave>?show?slave?status?G***************************?1.?row?***************************???????????????Slave_IO_State:?Waiting?for?master?to?send?event??????????????????Master_Host:?192.168.1.245??????????????????Master_User:?repl??????????????????Master_Port:?3306????????????????Connect_Retry:?60??????????????Master_Log_File:?node3-binlog.000001??????????Read_Master_Log_Pos:?457???????????????Relay_Log_File:?node5-relay-bin.000002????????????????Relay_Log_Pos:?676????????Relay_Master_Log_File:?node3-binlog.000001?????????????Slave_IO_Running:?Yes????????????Slave_SQL_Running:?Yes??????????????...............--主服務器端操作如下 Master>?create?database?tempdb; Query?OK,?1?row?affected?(0.02?sec) Master>?use?tempdb Database?changed Master>?create?table?t1(id?int,ename?varchar(20)); Query?OK,?0?rows?affected?(0.09?sec) Master>?insert?into?t1?values(1,'leshami'); Query?OK,?1?row?affected?(0.08?sec) --從服務器端驗證Slave>?select?*?from?tempdb.t1; +------+---------+|?id???|?ename???| +------+---------+|????1?|?leshami?| +------+---------+1?row?in?set?(0.01?sec) 3、基于mysqldump搭建gtid從庫? --準備環境,從庫端執行 Slave>?stop?slave;??????????--停止重庫 Query?OK,?0?rows?affected?(0.01?sec) Slave>?reset?slave?all;?????--重置主從配置信息 Query?OK,?0?rows?affected?(0.02?sec)??? --準備環境,主庫端執行?? Master>?source?sakila-db/sakila-schema.sql??--導入mysql自帶的sakila數據庫 Master>?source?sakila-db/sakila-data.sql????--填充數據??? --使用mysqldump導出數據庫?? #?mysqldump?--all-databases?--single-transaction?--triggers?--routines?--events? >?--host=localhost?--port=3306?--user=root?--password=MyP@ssw0rd?>/tmp/alldb.sql???????? --導出的文件中已經包含了GTID_PURGED的信息 #?grep?GTID_PURGED?/tmp/alldb.sql??? SET?@@GLOBAL.GTID_PURGED='78336cdc-8cfb-11e6-ba9f-000c29328504:1-38';--將備份文件copy到從服務器 #?scp?/tmp/alldb.sql?192.168.1.247:/tmp--?執行reset?master,重置從服務器上的binlog Slave>?reset?master; Query?OK,?0?rows?affected?(0.03?sec) Slave>?source?/tmp/alldb.sqlSlave>?show?databases;????--此時tempdb已產生 +--------------------+|?Database???????????| +--------------------+|?information_schema?| |?mysql??????????????| |?performance_schema?| |?sakila?????????????| |?sys????????????????||?tempdb?????????????| +--------------------+--執行change?master Slave>?CHANGE?MASTER?TO?? ????->?MASTER_HOST='192.168.1.245',????????->?MASTER_USER='repl',????????->?MASTER_PASSWORD='123456',????????->?MASTER_PORT=3306,????????->?MASTER_AUTO_POSITION?=?1;Query?OK,?0?rows?affected,?2?warnings?(0.06?sec) Slave>?start?slave; Query?OK,?0?rows?affected?(0.00?sec) Slave>?show?slave?status?G***************************?1.?row?***************************???????????????Slave_IO_State:?Waiting?for?master?to?send?event??????????????????Master_Host:?192.168.1.245??????????????????Master_User:?repl??????????????????Master_Port:?3306????????????????Connect_Retry:?60??????????????Master_Log_File:?node3-binlog.000001??????????Read_Master_Log_Pos:?25637???????????????Relay_Log_File:?node5-relay-bin.000002????????????????Relay_Log_Pos:?423????????Relay_Master_Log_File:?node3-binlog.000001?????????????Slave_IO_Running:?Yes????????????Slave_SQL_Running:?Yes--主庫端執行一些事務 Master>?alter?table?tempdb.t1?modify?ename?varchar(50); Query?OK,?0?rows?affected?(0.05?sec) Records:?0??Duplicates:?0??Warnings:?0 Master>?insert?into?tempdb.t1?values(2,'http://blog.csdn.net/leshami'); Query?OK,?1?row?affected?(0.02?sec) --從庫端驗證結果Slave>?desc?tempdb.t1; +-------+-------------+------+-----+---------+-------+|?Field?|?Type????????|?Null?|?Key?|?Default?|?Extra?| +-------+-------------+------+-----+---------+-------+|?id????|?int(11)?????|?YES??|?????|?NULL????|???????||?ename?|?varchar(50)?|?YES??|?????|?NULL????|???????| +-------+-------------+------+-----+---------+-------+2?rows?in?set?(0.00?sec)Slave>?select?*?from?tempdb.t1; +------+------------------------------+|?id???|?ename????????????????????????| +------+------------------------------+|????1?|?leshami??????????????????????||????2?|?http://www.php.cn/?| +------+------------------------------+
以上就是基于mysqldump搭建gtid主從的內容,更多相關內容請關注PHP中文網(www.php.cn)!
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END