mysql多源复制脚本_Mysql多源复制
1、概述
以下是多源復(fù)制的架構(gòu)圖(來(lái)自2015 OOW的ppt)
本文檔實(shí)驗(yàn)的架構(gòu)圖:
2、所需軟件
3、MySQL軟件的安裝(在四臺(tái)服務(wù)器上都裝上MySQL5.7.9數(shù)據(jù)庫(kù)軟件)
3.1、查詢(xún)服務(wù)器上是否已經(jīng)安裝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 (不理會(huì)依賴(lài)關(guān)系,刪除所有上一步查出來(lái)的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
進(jìn)入mysql,修改密碼
setpassword=password(‘Apexapex@123’);
3.5、開(kāi)啟mysql的3306端口號(hào),給root用戶(hù)授權(quán),用于遠(yuǎn)程訪問(wèn)
3.5.1、開(kāi)啟mysql端口號(hào)及關(guān)閉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
關(guān)閉Selinux
sed -i'/SELINUX/s/enforcing/disabled/' /etc/selinux/config
3.5.2、給root用戶(hù)授權(quán),使遠(yuǎn)程客戶(hù)端才能夠連接過(guò)來(lái)
GRANT ALLPRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Apexapex@123' WITH GRANT OPTION;
4、主備復(fù)制配置步驟如下(master與slave配置)
4.1、修改主服務(wù)器的配置文件
vi /etc/my.cnf
在[mysqld]下添加以下內(nèi)容
log_bin=/var/lib/mysql/mysql-bin
server-id = 67
gtid_mode=ON
enforce_gtid_consistency=ON
4.2、修改備服務(wù)器slave
vi /etc/my.cnf
在[mysqld]下添加以下內(nèi)容
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、重啟兩臺(tái)服務(wù)器的mysql
/etc/init.d/mysqlrestart
4.4、在主服務(wù)器上建立帳戶(hù)并授權(quán)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、配置備服務(wù)器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';
啟動(dòng)備服務(wù)器復(fù)制功能
mysql>start slave;
4.6、檢查備服務(wù)器復(fù)制功能狀態(tài)
mysql> show slavestatus\G;
注:Standby_IO及Standby_SQL進(jìn)程必須正常運(yùn)行,即YES狀態(tài),否則都是錯(cuò)誤的狀態(tài)(如:其中一個(gè)NO均屬錯(cuò)誤)。
以上操作過(guò)程,主備服務(wù)器配置完成。
4.7、主備服務(wù)器測(cè)試
主服務(wù)器Mysql,建立數(shù)據(jù)庫(kù),并在這個(gè)庫(kù)中建表插入一條數(shù)據(jù):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)
備服務(wù)器Mysql查詢(xún):
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;??? //可以看到在主服務(wù)器上新增的具體數(shù)據(jù)
+------+------+
|id?? | name |
+------+------+
|??? 1 | apex |
+------+------+
1row in set (0.00 sec)
5、節(jié)點(diǎn)master1配置
5.1、修改主服務(wù)器master1
vi /etc/my.cnf
在[mysqld]下添加以下內(nèi)容
log_bin=/var/lib/mysql/mysql-bin
server-id = 66
port=3306
gtid_mode=ON
enforce_gtid_consistency=ON
5.2、在主服務(wù)器上建立帳戶(hù)并授權(quán)給multiple
# mysql -u root-p
Enter password:
mysql> GRANTREPLICATION STANDBY ON *.* TO apexsoft1@'%' IDENTIFIED BY '123456';
mysql>flushprivileges;
6、節(jié)點(diǎn)multiple(多源復(fù)制到的節(jié)點(diǎn))配置
6.1、修改multiple的配置文件
vi /etc/my.cnf
在[mysqld]下添加以下內(nèi)容
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服務(wù)器
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、關(guān)于多源復(fù)制常見(jiàn)問(wèn)題
7.1、主鍵沖突解決方法
7.1.1、方法一:在multiple上取消唯一性約束、主鍵約束
可能產(chǎn)生的后果是,在multiple上進(jìn)行查詢(xún)時(shí),不走主鍵的索引,查詢(xún)效率變慢。
7.1.2、方法二:在master與master1上對(duì)同一庫(kù)或同一表上分別取不同的名字
7.2、增加標(biāo)志位來(lái)顯示屬于哪個(gè)庫(kù)同步過(guò)來(lái)的
方法一:在建表時(shí),直接增加一列來(lái)標(biāo)識(shí)屬于哪臺(tái)數(shù)據(jù)庫(kù)。
方法二:在master與master1上對(duì)同一庫(kù)或同一表上分別取不同的名字,同步到multiple后,通過(guò)建立視圖增加一列來(lái)標(biāo)識(shí)屬于哪一個(gè)庫(kù)。如 t2表與t3表:
create viewTview as select id,name, 't2' as 'SIGN' from t2 union select id,name, 't3' as'SIGN' from t3;
7.3、過(guò)濾功能
在單臺(tái)的情況(沒(méi)有主從的情況),可以在該臺(tái)數(shù)據(jù)庫(kù)上使用過(guò)濾條件;
在主從架構(gòu)的情況,如果在主庫(kù)使用過(guò)濾條件,也會(huì)把備庫(kù)進(jìn)行過(guò)濾的,所以不能在主庫(kù)使用過(guò)濾??梢钥紤]以下兩種方法:
方法一:
可以在備庫(kù)上使用過(guò)濾條件,然后讓備庫(kù)把數(shù)據(jù)同步到multiple上。整個(gè)架構(gòu)就變成這樣了。
方法二:
在mutilple數(shù)據(jù)庫(kù)上使用過(guò)濾條件,這種情況的過(guò)濾實(shí)質(zhì)是這樣的。每個(gè)源庫(kù)都有把數(shù)據(jù)傳到mutiple數(shù)據(jù)庫(kù),存儲(chǔ)為中繼日志,只是在mutiple端沒(méi)有使用sql thread去解析,執(zhí)行這些語(yǔ)句而已,還是占用了網(wǎng)絡(luò)帶寬,影響源庫(kù)的性能。
7.4、多源到底能支持多少個(gè)源呢
本文轉(zhuǎn)自 corasql 51CTO博客,原文鏈接:http://blog.51cto.com/corasql/1709483,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的mysql多源复制脚本_Mysql多源复制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: windows 2012 apache
- 下一篇: mysql连接超过8小时错误_mysql