日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2025/3/21 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 master slave mysql_Mysql---Master-slave复制方案 - dba成长之路- 博客频道 - CSDN.NET 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

準備環節:

主、從服務器 操作系統、mysql版本必須一致

一、環境

主機:

master操作系統:centos 5.5? 64位

IP:192.168.3.28

MySQL版本:5.5.17

從機:

slave操作系統:centos 5.5? 64位

IP:192.168.3.108

MySQL版本:5.7.17

二、master機和slave機的相關配置

1、創建一個復制用戶,具有replication slave 權限。

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

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

如果/etc/目錄下沒有my.cnf配置文件,請到/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

說明:

log-bin――設置二進制日志文件的基本名;

log-bin-index設置二進制日志索引文件名。

binlog_format――控制二進制日志格式,進而控制了復制類型,三個可選值,STATEMENT:語句復制,類似Oracle的邏輯DG;

ROW:行復制,類似Oracle的物理DG;

MIXED:混和復制,默認選項。為避免出現主從數據不一致,建議將其修改為ROW。

server-id――為服務器設置唯一ID,默認為1,推薦取IP最后部分;

sync-binlog――默認為0,為保證不會丟失數據,需設置為1,用于強制每次提交事務時,同步二進制日志到磁盤上。

注:這幾個參數是必須的,其他更多參數請參考相關文檔

3、重啟master機的mysql服務:service mysqld restart

若Master庫可以停機,則可直接拷貝所有數據庫文件;若Master庫是在線生產庫,不能停機,則可采用多種方法對其進行完全備份,最好采用mysqldump,因為它對所有存儲引擎均可使用。

――為了獲取一個一致性的快照,需對所有表設置讀鎖

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

――獲取二進制日志的偏移量

mysql> show master status;

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

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

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

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

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

1 row in set (0.00 sec)

――備份數據庫

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

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

對于MyISAM引擎,或多引擎混合的數據庫,可使用-l參數鎖定表,獲取一致性備份

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

注:因為我們提前使用flush tables with read lock命令給所有表加了讀鎖,所以此處也不必使用-l參數再加鎖。

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

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

――恢復Master庫的寫操作

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

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

二、從服務器

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

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

說明:

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

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

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

4)slave_net_timeout――設置網絡超時時間,即多長時間測試一下主從是否連接,默認為3600秒,即1小時,這個值在生產環境過大,我們將其修改為10秒,即若主從中斷10秒,則觸發重新連接動作。

2、恢復slave

將Master庫的備份恢復到Slave庫,方法比較簡單,直接執行即可。

# mysql -uroot -proot123

說明:skip-slave-start作用是啟動從庫但不立即啟動從庫的復制進程,以便對從庫進行進一步的設置。

2、啟動從數據庫

service mysql restart

3、對從數據庫進行相應設置

#如果出現出現這個錯誤: ERROR 1201 (HY000): Could not initialize master!需停止slave進程

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、啟動從服務器slave線程

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

執行show processlist命令顯示以下進程:

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線程狀態

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)

說明:

Slave_IO_Running――此進程負責從Slave從Master上讀取binlog日志,并寫入Slave上的中繼日志。

Slave_SQL_Running――此進程負責讀取并執行中繼日志中的binlog日志。

這兩個進程的狀態需全部為YES,只要有一個為NO,則復制就會停止。

當Slave中Relay_Master_Log_File和Master_Log_File相同且Read_Master_Log_Pos和Exec_Master_Log_Pos完全相同時,則表明Slave和Master處于完全同步的狀態。

三、測試

1、在master庫創建一個測試表,并插入數據;

mysql> create table test3 as select * from test2;

2、然后在slave庫查看是否正確復制

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)

說明:

1)可見從服務器已經正確復制了主服務器的數據,主從復制正確配置成功。

2)但是read-only參數沒有起作用,這是因為我們是用root賬戶登陸的,它具有super權限,換成普通賬戶test,即未授予super或all權限的賬戶,測試如下:

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

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。