mysql多源复制脚本_Mysql多源复制
1、概述
以下是多源復制的架構圖(來自2015 OOW的ppt)
本文檔實驗的架構圖:
2、所需軟件
3、MySQL軟件的安裝(在四臺服務器上都裝上MySQL5.7.9數據庫軟件)
3.1、查詢服務器上是否已經安裝mysql
[root@master ~]#rpm -aq | grep mysql
mysql-server-5.1.66-2.el6_3.x86_64
mysql-libs-5.1.66-2.el6_3.x86_64
mysql-devel-5.1.66-2.el6_3.x86_64
qt-mysql-4.6.2-25.el6.x86_64
mysql-5.1.66-2.el6_3.x86_64
3.2、先卸載舊的版本
rpm -e mysql --nodeps --allmatches (不理會依賴關系,刪除所有上一步查出來的mysql)
[root@master ~]#rpm -e mysql-server-5.1.66-2.el6_3.x86_64 --nodeps --allmatches
[root@master ~]#rpm -e mysql-libs-5.1.66-2.el6_3.x86_64?--nodeps --allmatches
[root@master ~]#rpm -e mysql-devel-5.1.66-2.el6_3.x86_64?--nodeps --allmatches
[root@master ~]#rpm -e qt-mysql-4.6.2-25.el6.x86_64?--nodeps --allmatches
[root@master ~]#rpm -e mysql --nodeps --allmatches
[root@master ~]#rpm -aq | grep mysql
3.3、安裝軟件
rpm -ivfmysql-community-libs-compat-5.7.9-1.el6.x86_64.rpm
rpm -ivfmysql-community-libs-5.7.9-1.el6.x86_64.rpm
rpm -ivfmysql-community-common-5.7.9-1.el6.x86_64.rpm
rpm -ivfmysql-community-client-5.7.9-1.el6.x86_64.rpm
rpm -ivfmysql-community-embedded-5.7.9-1.el6.x86_64.rpm
rpm -ivfmysql-community-embedded-devel-5.7.9-1.el6.x86_64.rpm
rpm -ivfmysql-community-server-5.7.9-1.el6.x86_64.rpm
rpm -ivfmysql-community-devel-5.7.9-1.el6.x86_64.rpm
rpm -ivfmysql-community-libs-5.7.9-1.el6.x86_64.rpm
rpm -ivfmysql-community-test-5.7.9-1.el6.x86_64.rpm
3.4、MySQL 5.7.9修改密碼
service mysqldstart
查看密碼
sudo grep'temporary password' /var/log/mysqld.log
進入mysql,修改密碼
setpassword=password(‘Apexapex@123’);
3.5、開啟mysql的3306端口號,給root用戶授權,用于遠程訪問
3.5.1、開啟mysql端口號及關閉Selinux
/sbin/iptables-I INPUT -p tcp --dport 3306 -j ACCEPT
/sbin/iptables-I INPUT -p udp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptablessave
/etc/rc.d/init.d/iptablesrestart
關閉Selinux
sed -i'/SELINUX/s/enforcing/disabled/' /etc/selinux/config
3.5.2、給root用戶授權,使遠程客戶端才能夠連接過來
GRANT ALLPRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Apexapex@123' WITH GRANT OPTION;
4、主備復制配置步驟如下(master與slave配置)
4.1、修改主服務器的配置文件
vi /etc/my.cnf
在[mysqld]下添加以下內容
log_bin=/var/lib/mysql/mysql-bin
server-id = 67
gtid_mode=ON
enforce_gtid_consistency=ON
4.2、修改備服務器slave
vi /etc/my.cnf
在[mysqld]下添加以下內容
log_bin=/var/lib/mysql/mysql-bin
server-id = 68
master_info_repository=TABLE
relay_log_info_repository=TABLE
gtid_mode=ON
enforce_gtid_consistency=ON
4.3、重啟兩臺服務器的mysql
/etc/init.d/mysqlrestart
4.4、在主服務器上建立帳戶并授權slave
# mysql -u root-p
Enter password:
GRANTREPLICATION SLAVE ON *.* TO apexsoft@'%' IDENTIFIED BY 'Apexapex@123';
GRANT REPLICATIONSLAVE ON *.* TO rep@'%' IDENTIFIED BY 'Apexapex@123';
flushprivileges;
4.5、配置備服務器slave
CHANGE MASTER TOMASTER_HOST = '192.168.1.67', MASTER_PORT = 3306,MASTER_USER = 'apexsoft',MASTER_PASSWORD = 'Apexapex@123',MASTER_AUTO_POSITION = 1 FOR CHANNEL 'master1';
啟動備服務器復制功能
mysql>start slave;
4.6、檢查備服務器復制功能狀態
mysql> show slavestatus\G;
注:Standby_IO及Standby_SQL進程必須正常運行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。
以上操作過程,主備服務器配置完成。
4.7、主備服務器測試
主服務器Mysql,建立數據庫,并在這個庫中建表插入一條數據:mysql> create database apex_db;
Query OK, 1 rowaffected (0.00 sec)
mysql> useapex_db;
Database changed
mysql>?create table apex_tb(id int(3),name char(10));
Query OK, 0 rowsaffected (0.00 sec)
mysql> insertinto apex_tb values(001,' apex ');
Query OK, 1 rowaffected (0.00 sec)
mysql> showdatabases;
+--------------------+
|Database?????????? |
+--------------------+
|information_schema |
|apex_db????????????|
| mysql?????????????|
|test??????????????|
+--------------------+
4rows in set (0.00 sec)
備服務器Mysql查詢:
mysql> show databases;
+--------------------+
|Database?????????? |
+--------------------+
|information_schema |
| apex_db?????????????|
|mysql?????????????|
|test??????????????|
+--------------------+
4rows in set (0.00 sec)
mysql> use apex_db
Database changed
mysql> select* from apex_tb;??? //可以看到在主服務器上新增的具體數據
+------+------+
|id?? | name |
+------+------+
|??? 1 | apex |
+------+------+
1row in set (0.00 sec)
5、節點master1配置
5.1、修改主服務器master1
vi /etc/my.cnf
在[mysqld]下添加以下內容
log_bin=/var/lib/mysql/mysql-bin
server-id = 66
port=3306
gtid_mode=ON
enforce_gtid_consistency=ON
5.2、在主服務器上建立帳戶并授權給multiple
# mysql -u root-p
Enter password:
mysql> GRANTREPLICATION STANDBY ON *.* TO apexsoft1@'%' IDENTIFIED BY '123456';
mysql>flushprivileges;
6、節點multiple(多源復制到的節點)配置
6.1、修改multiple的配置文件
vi /etc/my.cnf
在[mysqld]下添加以下內容
log_bin=/var/lib/mysql/mysql-bin
server-id = 69
master_info_repository=TABLE
relay_log_info_repository=TABLE
gtid_mode=ON
enforce_gtid_consistency=ON
6.2、配置multiple服務器
CHANGE MASTER TOMASTER_HOST = '192.168.1.66', MASTER_PORT = 3306,MASTER_USER = 'apexsoft1',MASTER_PASSWORD = 'Apexapex@123',MASTER_AUTO_POSITION = 1 FOR CHANNEL'master1';
CHANGE MASTER TOMASTER_HOST = '192.168.1.67', MASTER_PORT = 3306,MASTER_USER = 'rep',MASTER_PASSWORD = 'Apexapex@123',MASTER_AUTO_POSITION = 1 FOR CHANNEL'master2';
start slave forchannel ‘master1’;
start slave forchannel ‘master2’;
show slavestatus\G;
7、關于多源復制常見問題
7.1、主鍵沖突解決方法
7.1.1、方法一:在multiple上取消唯一性約束、主鍵約束
可能產生的后果是,在multiple上進行查詢時,不走主鍵的索引,查詢效率變慢。
7.1.2、方法二:在master與master1上對同一庫或同一表上分別取不同的名字
7.2、增加標志位來顯示屬于哪個庫同步過來的
方法一:在建表時,直接增加一列來標識屬于哪臺數據庫。
方法二:在master與master1上對同一庫或同一表上分別取不同的名字,同步到multiple后,通過建立視圖增加一列來標識屬于哪一個庫。如 t2表與t3表:
create viewTview as select id,name, 't2' as 'SIGN' from t2 union select id,name, 't3' as'SIGN' from t3;
7.3、過濾功能
在單臺的情況(沒有主從的情況),可以在該臺數據庫上使用過濾條件;
在主從架構的情況,如果在主庫使用過濾條件,也會把備庫進行過濾的,所以不能在主庫使用過濾。可以考慮以下兩種方法:
方法一:
可以在備庫上使用過濾條件,然后讓備庫把數據同步到multiple上。整個架構就變成這樣了。
方法二:
在mutilple數據庫上使用過濾條件,這種情況的過濾實質是這樣的。每個源庫都有把數據傳到mutiple數據庫,存儲為中繼日志,只是在mutiple端沒有使用sql thread去解析,執行這些語句而已,還是占用了網絡帶寬,影響源庫的性能。
7.4、多源到底能支持多少個源呢
本文轉自 corasql 51CTO博客,原文鏈接:http://blog.51cto.com/corasql/1709483,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的mysql多源复制脚本_Mysql多源复制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows 2012 apache
- 下一篇: mysql连接超过8小时错误_mysql