環(huán)境
(主)環(huán)境 : linux(centos 7.0.2) Mysql(5.6.37) IP:192.168.1.3
(從)環(huán)境 : linux(centos 7.0.2) Mysql(5.6.36) IP:192.168.1.4
隨便說說(也可忽略)
為了配置準(zhǔn)確無誤,先將權(quán)限氓鄙、防火墻等等處理
1诚隙、關(guān)閉windows、linux防火墻:
windows:控制面板->防火墻->打開或關(guān)閉Windows防護(hù)墻關(guān)閉Windows防火墻赎懦。
linux:service iptables stop 如果不行雀鹃,參考centos下關(guān)閉防火墻和Selinux
2、權(quán)限
linux授權(quán)遠(yuǎn)程訪問(2句話):GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; FLUSH PRIVILEGES;
正文開始
主環(huán)境配置
1.修改mysql的配置文件 my.cnf my.ini 我的配置文件路徑是 /etc/my.cnf
[mysqld]
log-bin=mysql-bin #(必須配置) 啟用二進(jìn)制日志
server-id=1 #(必須配置) 為本臺(tái)服務(wù)器配置唯一的Server ID
binlog-do-db=aco_game_server #(可選配置)要同步的數(shù)據(jù)庫(kù)名励两,要同步多個(gè)數(shù)據(jù)庫(kù)黎茎,就多加幾個(gè)replicate-db-db=數(shù)據(jù)庫(kù)名
binlog-ignore-db=mysql #(可選配置)//要忽略的數(shù)據(jù)庫(kù)
#二進(jìn)制日志自動(dòng)刪除的天數(shù),默認(rèn)值為0,表示“沒有自動(dòng)刪除”伐蒋,啟動(dòng)時(shí)和二進(jìn)制日志循環(huán)時(shí)可能刪除
expire_logs_days = 7
2.添加從庫(kù)權(quán)限賬號(hào)
mysql -uroot -p
CREATE USER 'mysync'@'116.62.126.1' IDENTIFIED BY 'abC123456##'; #創(chuàng)建用戶
GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'116.62.126.1';#分配權(quán)限
flush privileges; #刷新權(quán)限
3.重啟主服務(wù)器
/bin/systemctl restart mysqld.service(centos)
/bin/systemctl restart mysql.service(ubuntu)
4.查看主服務(wù)器狀態(tài)
show master status;
從環(huán)境配置
1.修改mysql的配置文件 my.cnf my.ini 我的配置文件路徑是 /etc/my.cnf
[mysqld]
log-bin=mysql-bin #(必須配置) 啟用二進(jìn)制日志
server-id=2 #(必須配置) 為本臺(tái)服務(wù)器配置唯一的Server ID
replicate-do-db=mstest #(可選配置)#在master端不指定binlog-do-db工三,在slave端用replication-do-db來過濾,要同步多個(gè)數(shù)據(jù)庫(kù)先鱼,就多加幾個(gè)replicate-db-db=數(shù)據(jù)庫(kù)名
binlog-ignore-db=mysql #(可選配置)//要忽略的數(shù)據(jù)庫(kù)
relay-log=mysqld-relay-bin #//啟用中繼日志relay log
2.配置連接主服務(wù)器的信息
change master to
master_host='47.111.188.1',
master_user='mysync',
master_password='abC123456##',
master_log_file='mysql-bin.000002',
Master_Port=3306,
master_log_pos=154;
flush privileges; #刷新權(quán)限
start slave;
3.重啟從服務(wù)器
/bin/systemctl restart mysqld.service(centos)
/bin/systemctl restart mysql.service(ubuntu)
4.查看從服務(wù)器狀態(tài)
show slave status \G;
到此可以進(jìn)行主從測(cè)試了俭正。
注:在本次實(shí)驗(yàn)中,由上述my.cnf配置文件可得知焙畔,主從同步針對(duì)的數(shù)據(jù)庫(kù)(除了mysql,sys,information_schema,performance_schema這些以外)的其它所有數(shù)據(jù)庫(kù)都會(huì)進(jìn)行同步(含數(shù)據(jù)庫(kù)掸读、表、數(shù)據(jù)等)
1宏多、如當(dāng)前數(shù)據(jù)庫(kù)情況如下:
2儿惫、在master主庫(kù)容器中,創(chuàng)建數(shù)據(jù)庫(kù)master_demo伸但,并在此庫(kù)下創(chuàng)建表userinfo肾请,并插入一條記錄
create database master_demo;
use master_demo;
create table userinfo(username varchar(50),age int);
insert into userinfo values('Tom',18);
3、此時(shí)更胖,進(jìn)入從庫(kù)容器中铛铁,查看:
確實(shí)已經(jīng)將在master主庫(kù)新建的數(shù)據(jù)庫(kù)和表記錄都同步過來了隔显。
既然是主從同步,那反過來驗(yàn)證一下饵逐,在從庫(kù)下插入記錄后括眠,會(huì)不會(huì)同步到主庫(kù)中來呢?
在從庫(kù)上操作插入記錄:
insert into userinfo values('slave',20);
查看:
切到master主庫(kù)中倍权,查看:
發(fā)現(xiàn)在master主庫(kù)中掷豺,還是只有一條記錄,說明與預(yù)期設(shè)想的一樣薄声,在從庫(kù)中插入記錄当船,是不會(huì)同步到master主庫(kù)中來的
再來一波,在主庫(kù)master上奸柬,插入新記錄:
insert into userinfo values('master',25);
在從庫(kù)中生年,查看
發(fā)現(xiàn)在master主庫(kù)中新加入的master記錄婴程,在從庫(kù)中同步過來了廓奕。
提示:
主服務(wù)器:
提示1:如果你不配置server-id或者配置值為0,那么主服務(wù)器將拒絕所有從服務(wù)器的連接档叔。
提示2:在使用InnoDB的事務(wù)復(fù)制桌粉,為了盡可能持久和數(shù)據(jù)一致,你應(yīng)該在my.cnf里配置innodb_flush_log_at_trx_commit=1 和 sync_binlog=1衙四;
For the greatest possible durability and consistency in a replication setup using InnoDB with transactions, you should useinnodb_flush_log_at_trx_commit=1 and sync_binlog=1 in the master my.cnf file.
提示3:確保主服務(wù)器里的skip-networking選項(xiàng)未啟用铃肯,如果網(wǎng)絡(luò)被禁用,你的從服務(wù)器將不能與主服務(wù)器通信并且復(fù)制失敗传蹈。
從服務(wù)器:
提示1:如果有多個(gè)從服務(wù)器押逼,每個(gè)服務(wù)器的server-id不能重復(fù),跟IP一樣是唯一標(biāo)識(shí)惦界,如果你沒設(shè)置server-id或者設(shè)置為0挑格,則從服務(wù)器不會(huì)連接到主服務(wù)器之众。
提示2:一般你不需要在從服務(wù)器上啟用二進(jìn)制日志拐纱,如果你在從服務(wù)器上啟用二進(jìn)制日志溪食,那你可用它來做數(shù)據(jù)備份和崩潰恢復(fù)斤程,或者做更復(fù)雜的事情(比如這個(gè)從服務(wù)器用來當(dāng)作其它從服務(wù)器的主服務(wù)器)
FAQ
在搭建mysql主主復(fù)制的時(shí)候衅码,創(chuàng)建一個(gè)新的具有replicaion權(quán)限的新用戶漂羊,剛開始的操作如下:
mysql> GRANT REPLICATION SLAVE ON test.* TO ‘server01’@’%’ IDENTIFIED BY ‘server01’;
會(huì)提示錯(cuò)誤:ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
錯(cuò)誤的原因是因?yàn)楹罂兀瑀eplication權(quán)限是一個(gè)全局權(quán)限匿级,不可以指定在某一個(gè)庫(kù)上狂窑,所以媳板,把創(chuàng)建用戶語(yǔ)句更改為如下即可:
mysql> GRANT REPLICATION SLAVE ON . TO ‘server01’@’192.168.40.129’ IDENTIFIED BY ‘568888’;
Query OK, 0 rows affected (0.00 sec)
ok,一切正常泉哈,但是蛉幸,為了安全起見到旦,在創(chuàng)建新的用戶的時(shí)候,最好指定登陸地址巨缘,不然別人拿著你的賬號(hào)就要干壞事兒了添忘,雖然這個(gè)賬號(hào)只具備replication權(quán)限,但是也是具有危險(xiǎn)性的若锁。所以搁骑,最后的語(yǔ)句更改為:
mysql> GRANT REPLICATION SLAVE ON . TO ‘server01’@’192.168.40.129’ IDENTIFIED BY ‘568888’;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
報(bào)錯(cuò)
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
解決辦法:reset slave; start slave;