日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

master slave mysql_Mysql---Master-slave复制方案 - dba成长之路- 博客频道 - CSDN.NET

發(fā)布時(shí)間:2025/3/21 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 master slave mysql_Mysql---Master-slave复制方案 - dba成长之路- 博客频道 - CSDN.NET 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

準(zhǔn)備環(huán)節(jié):

主、從服務(wù)器 操作系統(tǒng)、mysql版本必須一致

一、環(huán)境

主機(jī):

master操作系統(tǒng):centos 5.5? 64位

IP:192.168.3.28

MySQL版本:5.5.17

從機(jī):

slave操作系統(tǒng):centos 5.5? 64位

IP:192.168.3.108

MySQL版本:5.7.17

二、master機(jī)和slave機(jī)的相關(guān)配置

1、創(chuàng)建一個(gè)復(fù)制用戶,具有replication slave 權(quán)限。

mysql>grant replication slave on *.* to ‘wxl’@’192.168.3.108′ identified by ‘123456’

2、修改master機(jī)器中mysql配置文件my.cnf,該文件在/etc目錄下

如果/etc/目錄下沒有my.cnf配置文件,請(qǐng)到/usr/share/mysql/找到my-medium*.cnf文件,拷貝到/etc/并改名為my.cnf

命令如:# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

在[mysqld]配置段添加如下字段

log-bin???????? = mysql-bin

log-bin-index?? = mysql-bin.index

binlog_format?? = row

server-id?????? = 38

sync-binlog???? = 1

character-set-server = utf8

說(shuō)明:

log-bin――設(shè)置二進(jìn)制日志文件的基本名;

log-bin-index設(shè)置二進(jìn)制日志索引文件名。

binlog_format――控制二進(jìn)制日志格式,進(jìn)而控制了復(fù)制類型,三個(gè)可選值,STATEMENT:語(yǔ)句復(fù)制,類似Oracle的邏輯DG;

ROW:行復(fù)制,類似Oracle的物理DG;

MIXED:混和復(fù)制,默認(rèn)選項(xiàng)。為避免出現(xiàn)主從數(shù)據(jù)不一致,建議將其修改為ROW。

server-id――為服務(wù)器設(shè)置唯一ID,默認(rèn)為1,推薦取IP最后部分;

sync-binlog――默認(rèn)為0,為保證不會(huì)丟失數(shù)據(jù),需設(shè)置為1,用于強(qiáng)制每次提交事務(wù)時(shí),同步二進(jìn)制日志到磁盤上。

注:這幾個(gè)參數(shù)是必須的,其他更多參數(shù)請(qǐng)參考相關(guān)文檔

3、重啟master機(jī)的mysql服務(wù):service mysqld restart

若Master庫(kù)可以停機(jī),則可直接拷貝所有數(shù)據(jù)庫(kù)文件;若Master庫(kù)是在線生產(chǎn)庫(kù),不能停機(jī),則可采用多種方法對(duì)其進(jìn)行完全備份,最好采用mysqldump,因?yàn)樗鼘?duì)所有存儲(chǔ)引擎均可使用。

――為了獲取一個(gè)一致性的快照,需對(duì)所有表設(shè)置讀鎖

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

――獲取二進(jìn)制日志的偏移量

mysql> show master status;

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

| File???????????? | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000003 |????? 107 |????????????? |????????????????? |

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

1 row in set (0.00 sec)

――備份數(shù)據(jù)庫(kù)

對(duì)于事務(wù)性引擎(如:InnoDB),可使用--single-transaction參數(shù)獲取一個(gè)一致性快照。

# mysqldump -uroot -proot123 --all-database -e --single-transaction --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384>/data/all_db.sql

對(duì)于MyISAM引擎,或多引擎混合的數(shù)據(jù)庫(kù),可使用-l參數(shù)鎖定表,獲取一致性備份

# mysqldump -uroot --all-database -e -l --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384>/data/all_db.sql

注:因?yàn)槲覀兲崆笆褂胒lush tables with read lock命令給所有表加了讀鎖,所以此處也不必使用-l參數(shù)再加鎖。

――備份完成后,將備份文件拷貝到Slave端

# scp all_db.sql root@192.168.3.108:/data/

――恢復(fù)Master庫(kù)的寫操作

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

其實(shí)mysqldump還提供了一個(gè)--master-data參數(shù),備份文件中包含了change master to語(yǔ)句,為了清晰了解主從復(fù)制的過程,我們不采用這個(gè)參數(shù)。

二、從服務(wù)器

1、編輯my.cnf文件 在[mysqld]組添加以下設(shè)置

log-bin???????????? = /data/mysql/mysql-bin

binlog_format?????? = row

log-slave-updates?? = 1

server-id?????????? = 108

relay-log?????????? = mysql-relay-bin

relay-log-index???? = mysql-relay-bin.index

read-only?????????? = 1

slave_net_timeout?? =10

說(shuō)明:

1)relay-log――設(shè)置中繼日志文件基本名;relay-log-index設(shè)置中繼日志索引文件名。

2)read-only――設(shè)置Slave為只讀,但具有super權(quán)限的用戶仍然可寫。

3)log-slave-updates――該參數(shù)用來(lái)控制Slave上的更新是否寫入二進(jìn)制日志,默認(rèn)為0;若Slave只作為從服務(wù)器,則不必啟用;若Slave作為其他服務(wù)器的Master,則需啟用,啟用時(shí)需和log-bin、binlog-format一起使用,這樣Slave從主庫(kù)讀取日志并重做,然后記錄到自己的二進(jìn)制日志中。

4)slave_net_timeout――設(shè)置網(wǎng)絡(luò)超時(shí)時(shí)間,即多長(zhǎng)時(shí)間測(cè)試一下主從是否連接,默認(rèn)為3600秒,即1小時(shí),這個(gè)值在生產(chǎn)環(huán)境過大,我們將其修改為10秒,即若主從中斷10秒,則觸發(fā)重新連接動(dòng)作。

2、恢復(fù)slave

將Master庫(kù)的備份恢復(fù)到Slave庫(kù),方法比較簡(jiǎn)單,直接執(zhí)行即可。

# mysql -uroot -proot123

說(shuō)明:skip-slave-start作用是啟動(dòng)從庫(kù)但不立即啟動(dòng)從庫(kù)的復(fù)制進(jìn)程,以便對(duì)從庫(kù)進(jìn)行進(jìn)一步的設(shè)置。

2、啟動(dòng)從數(shù)據(jù)庫(kù)

service mysql restart

3、對(duì)從數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)設(shè)置

#如果出現(xiàn)出現(xiàn)這個(gè)錯(cuò)誤: ERROR 1201 (HY000): Could not initialize master!需停止slave進(jìn)程

mysql> slave stop;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> reset slave;

Query OK, 0 rows affected,(0.00 sec)

mysql> change master to

-> master_host='192.168.3.28',

-> master_user='wxl',

-> master_password='123456',

-> master_log_file='mysql-bin.000003',

-> master_log_pos=107;

Query OK, 0 rows affected (0.01 sec)

4、啟動(dòng)從服務(wù)器slave線程

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

執(zhí)行show processlist命令顯示以下進(jìn)程:

mysql> show processlist \G

*************************** 1. row ***************************

Id: 2

User: root

Host: localhost

db: NULL

Command: Query

Time: 0

State: NULL

Info: show processlist

*************************** 2. row ***************************

Id: 3

User: system user

Host:

db: NULL

Command: Connect

Time: 21

State: Waiting for master to send event

Info: NULL

*************************** 3. row ***************************

Id: 4

User: system user

Host:

db: NULL

Command: Connect

Time: 21

State: Slave has read all relay log; waiting for the slave I/O thread to update it

Info: NULL

3 rows in set (0.00 sec)

5、查看slave線程狀態(tài)

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.3.28

Master_User: wxl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000009

Read_Master_Log_Pos: 107

Relay_Log_File: mysql-relay-bin.000014

Relay_Log_Pos: 253

Relay_Master_Log_File: mysql-bin.000009

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 107

Relay_Log_Space: 452

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 28

1 row in set (0.00 sec)

說(shuō)明:

Slave_IO_Running――此進(jìn)程負(fù)責(zé)從Slave從Master上讀取binlog日志,并寫入Slave上的中繼日志。

Slave_SQL_Running――此進(jìn)程負(fù)責(zé)讀取并執(zhí)行中繼日志中的binlog日志。

這兩個(gè)進(jìn)程的狀態(tài)需全部為YES,只要有一個(gè)為NO,則復(fù)制就會(huì)停止。

當(dāng)Slave中Relay_Master_Log_File和Master_Log_File相同且Read_Master_Log_Pos和Exec_Master_Log_Pos完全相同時(shí),則表明Slave和Master處于完全同步的狀態(tài)。

三、測(cè)試

1、在master庫(kù)創(chuàng)建一個(gè)測(cè)試表,并插入數(shù)據(jù);

mysql> create table test3 as select * from test2;

2、然后在slave庫(kù)查看是否正確復(fù)制

mysql> use test;

Database changed

mysql> show tables;

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

| Tables_in_test |

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

| test1????????? |

| test2????????? |

| test3????????? |

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

3 rows in set (0.00 sec)

mysql> select * from test3;

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

| user_name | user_pwd |

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

| zhangsan? | 123456?? |

| lisi????? | 123456?? |

| wangwu??? | 123456?? |

| zhaoliu?? | 123456?? |

| xiaoqian? | 123456?? |

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

5 rows in set (0.00 sec)

說(shuō)明:

1)可見從服務(wù)器已經(jīng)正確復(fù)制了主服務(wù)器的數(shù)據(jù),主從復(fù)制正確配置成功。

2)但是read-only參數(shù)沒有起作用,這是因?yàn)槲覀兪怯胷oot賬戶登陸的,它具有super權(quán)限,換成普通賬戶test,即未授予super或all權(quán)限的賬戶,測(cè)試如下:

mysql> use test

Database changed

mysql> select * from test;

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

| id?? | name?? |

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

|??? 6 | ffffff |

|??? 7 | gggggg |

|??? 8 | hhhhhh |

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

3 rows in set (0.00 sec)

mysql> delete from test;

ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement

可見提示為只讀,不能刪除。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的master slave mysql_Mysql---Master-slave复制方案 - dba成长之路- 博客频道 - CSDN.NET的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。