国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

幫助中心 >  技術(shù)知識(shí)庫(kù) >  云服務(wù)器 >  服務(wù)器教程 >  mysql數(shù)據(jù)庫(kù)的主從同步(主服務(wù)器存在內(nèi)網(wǎng)IP)

mysql數(shù)據(jù)庫(kù)的主從同步(主服務(wù)器存在內(nèi)網(wǎng)IP)

2020-10-28 09:29:29 13123

1 分別在兩臺(tái)服務(wù)器上安裝系統(tǒng)和mysql數(shù)據(jù)庫(kù)

主服務(wù)器WIN2008R2,主服務(wù)器虛擬機(jī)和從服務(wù)器上是centos 7系統(tǒng),并在centos 7系統(tǒng)安裝mysql 5.7

本文中的兩臺(tái)服務(wù)器的IP地址分別為主服務(wù)器(58.66.66.66)和從服務(wù)器(49.18.18.18)。

在主服務(wù)器上創(chuàng)建虛擬機(jī)IP 192.168.200.204,主服務(wù)器內(nèi)網(wǎng)IP 192.168.200.1。

主服務(wù)器上要把3306端口映射到虛擬機(jī)192.168.200.204的3306端口上面,并做一下安全放行。

分別在這兩個(gè)服務(wù)器上創(chuàng)建test數(shù)據(jù)庫(kù),以備后面測(cè)試。

2 master主服務(wù)器的配置

2.1 配置文件my.cnf的修改

#根據(jù)上一篇文章,編輯my.cnf文件

[root@localhost mysql]# vim /etc/my.cnf

 

#在[mysqld]中添加:

server-id=1

log_bin=master-bin

log_bin_index=master-bin.index

binlog_do_db=test

#備注:

#server-id 服務(wù)器唯一標(biāo)識(shí)。

#log_bin 啟動(dòng)MySQL二進(jìn)制日志,即數(shù)據(jù)同步語(yǔ)句,從數(shù)據(jù)庫(kù)會(huì)一條一條的執(zhí)行這些語(yǔ)句。

#binlog_do_db 指定記錄二進(jìn)制日志的數(shù)據(jù)庫(kù),即需要復(fù)制的數(shù)據(jù)庫(kù)名,如果復(fù)制多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可。

#binlog_ignore_db 指定不記錄二進(jìn)制日志的數(shù)據(jù)庫(kù),即不需要復(fù)制的數(shù)據(jù)庫(kù)名,如果有多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可。

#其中需要注意的是,binlog_do_db和binlog_ignore_db為互斥選項(xiàng),一般只需要一個(gè)即可。

 

2.2 創(chuàng)建從服務(wù)器的用戶和權(quán)限

#進(jìn)入mysql數(shù)據(jù)庫(kù)

[root@localhost mysql]# mysql -uroot -p

Enter password:

 

#創(chuàng)建從數(shù)據(jù)庫(kù)的masterbackup用戶和權(quán)限

mysql> grant replication slave on *.* to masterbackup@'49.18.18.18' identified by '123456';

mysql> grant replication slave on *.* to masterbackup@'192.168.200.1' identified by '123456';        (當(dāng)有虛擬機(jī)轉(zhuǎn)發(fā)端口的時(shí)候使用)

#備注

#若將 49.18.18.18 改為 %,則任何ip均可作為其從數(shù)據(jù)庫(kù)來(lái)訪問(wèn)主服務(wù)器

 

#退出mysql

mysql> exit;

 

2.3 重啟mysql服務(wù)

[root@localhost mysql]# service mysql restart

Shutting down MySQL.... SUCCESS! 

Starting MySQL. SUCCESS! 

2.4 查看主服務(wù)器狀態(tài)

#進(jìn)入mysql數(shù)據(jù)庫(kù)

[root@localhost mysql]# mysql -uroot -p

Enter password:

 

#查看主服務(wù)器狀態(tài)

mysql> show master status;

+-------------------+----------+--------------+------------------+-------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------+----------+--------------+------------------+-------------------+

| master-bin.000001 |      154 | test         |                  |                   |

+-------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec) 

 

3 slave從服務(wù)器的配置

3.1 配置文件my.cnf的修改

#根據(jù)上一篇文章,編輯my.cnf文件

[root@localhost mysql]# vim /etc/my.cnf

 

#在[mysqld]中添加:

server-id=2

relay-log=slave-relay-bin

relay-log-index=slave-relay-bin.index

#replicate-do-db=test

#備注:

#server-id 服務(wù)器唯一標(biāo)識(shí),如果有多個(gè)從服務(wù)器,每個(gè)服務(wù)器的server-id不能重復(fù),跟IP一樣是唯一標(biāo)識(shí),如果你沒(méi)設(shè)置server-id或者設(shè)置為0,則從服務(wù)器不會(huì)連接到主服務(wù)器。

#relay-log 啟動(dòng)MySQL二進(jìn)制日志,可以用來(lái)做數(shù)據(jù)備份和崩潰恢復(fù),或主服務(wù)器掛掉了,將此從服務(wù)器作為其他從服務(wù)器的主服務(wù)器。

#replicate-do-db 指定同步的數(shù)據(jù)庫(kù),如果復(fù)制多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可。若在master端不指定binlog-do-db,則在slave端可用replication-do-db來(lái)過(guò)濾。

#replicate-ignore-db 不需要同步的數(shù)據(jù)庫(kù),如果有多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可。

#其中需要注意的是,replicate-do-db和replicate-ignore-db為互斥選項(xiàng),一般只需要一個(gè)即可。

3.2 重啟mysql服務(wù)

[root@localhost mysql]# service mysql restart

Shutting down MySQL.... SUCCESS! 

Starting MySQL. SUCCESS!  

3.3 連接master主服務(wù)器

使用mysql -h58.66.66.66 -umasterbackup -p        進(jìn)行連接測(cè)試,看有沒(méi)有出現(xiàn)連接錯(cuò)誤

#進(jìn)入mysql數(shù)據(jù)庫(kù)

[root@localhost mysql]# mysql -uroot -p

Enter password:

 

#連接master主服務(wù)器

mysql> change master to master_host='58.66.66.66',master_port=3306,master_user='masterbackup',master_password='123456',master_log_file='master-bin.000001',master_log_pos=154;

#備注:

#master_host對(duì)應(yīng)主服務(wù)器的IP地址。

#master_port對(duì)應(yīng)主服務(wù)器的端口。

#master_log_file對(duì)應(yīng)show master status顯示的File列:master-bin.000001。

#master_log_pos對(duì)應(yīng)show master status顯示的Position列:154。 

 3.4 啟動(dòng)slave數(shù)據(jù)同步

#啟動(dòng)slave數(shù)據(jù)同步

mysql> start slave;

 

#停止slave數(shù)據(jù)同步(若有需要)

mysql> stop slave;

3.5 查看slave信息

mysql> show slave status\G; 


 

 

Slave_IO_Running和Slave_SQL_Running都為yes,則表示同步成功。

4 測(cè)試

(1)在主服務(wù)器上登陸mysql,且進(jìn)入test數(shù)據(jù)庫(kù),創(chuàng)建test表,且插入一條數(shù)據(jù)

提示:這里可以用數(shù)據(jù)庫(kù)管理工具(如nacicat)或是phpmyadmin來(lái)操作。

#創(chuàng)建tb_test表

create table tb_test(ID varchar(36) primary key comment '主鍵ID',MEMO varchar(500) not null comment '信息');

 

#插入一條數(shù)據(jù)

insert into tb_test(ID,MEMO) values('1','one test');

 

#提交

commit;

(2)在從服務(wù)器上登陸mysql,且進(jìn)入test數(shù)據(jù)庫(kù)

你會(huì)發(fā)現(xiàn)從數(shù)據(jù)庫(kù)中,也出現(xiàn)了tb_test表,且表中還有one test數(shù)據(jù)存在,證明同步數(shù)據(jù)成功。

5 解決錯(cuò)誤

若在主從同步的過(guò)程中,出現(xiàn)其中一條語(yǔ)句同步失敗報(bào)錯(cuò)了,則后面的語(yǔ)句也肯定不能同步成功了。例如,主庫(kù)有一條數(shù)據(jù),而從庫(kù)并沒(méi)有這一條數(shù)據(jù),然而,在主庫(kù)執(zhí)行了刪除這一條數(shù)據(jù)的操作,那么從庫(kù)沒(méi)有這么一條數(shù)據(jù)就肯定刪除不了,從而報(bào)錯(cuò)了。在此時(shí)的從數(shù)據(jù)庫(kù)的數(shù)據(jù)同步就失敗了,因此后面的同步語(yǔ)句就無(wú)法繼續(xù)執(zhí)行。

 

這里提供的解決方法有兩種:

(1)在從數(shù)據(jù)庫(kù)中,使用SET全局sql_slave_skip_counter來(lái)跳過(guò)事件,跳過(guò)這一個(gè)錯(cuò)誤,然后執(zhí)行從下一個(gè)事件組開(kāi)始。

#在從數(shù)據(jù)庫(kù)上操作

mysql > stop slave;

mysql > set global sql_slave_skip_counter=1;

mysql > start slave;

(2)在從數(shù)據(jù)庫(kù)中,重新連上主數(shù)據(jù)庫(kù)。這種操作會(huì)直接跳過(guò)中間的那些同步語(yǔ)句,可能會(huì)導(dǎo)致一些數(shù)據(jù)未同步過(guò)去的問(wèn)題,但這種操作也是最后的絕招。最好就是令從數(shù)據(jù)庫(kù)與主數(shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)都一致了之后,再來(lái)恢復(fù)主從同步的操作。

#在從數(shù)據(jù)庫(kù)上操作

mysql > stop slave;

mysql> change master to master_host='58.66.66.66',master_port=3306,master_user='masterbackup',master_password='123456',master_log_file='master-bin.000001',master_log_pos=2050;

mysql > start slave;

 

#備注

#master_log_file和master_log_pos可能會(huì)不同,需要在主數(shù)據(jù)庫(kù)中show master status來(lái)查看

6 總結(jié)

至此,mysql數(shù)據(jù)庫(kù)的主從同步就完成了。

PS:讀寫分離

我們可以在主服務(wù)器創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)用戶(出于安全,根據(jù)需求給予相應(yīng)的權(quán)限)主要用于寫操作,在程序中通過(guò)這一用戶連接主數(shù)據(jù)庫(kù)的只用于寫操作而不用讀操作。

在從服務(wù)器上創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)用戶(出于安全,只給予讀select的權(quán)限)主要用于讀操作,在程序中通過(guò)這一用戶連接從數(shù)據(jù)庫(kù)即可。


提交成功!非常感謝您的反饋,我們會(huì)繼續(xù)努力做到更好!

這條文檔是否有幫助解決問(wèn)題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問(wèn)題: