【MySQL】MySQL主從庫配置和主庫宕機解決方案


1、轉載:https://blog.csdn.net/zfl589778/article/details/51441719/

2、效果:親測有效,數據寫入成功。

3、主機宕機后,如果不是長時間宕機,且可手動重啟,直接重啟即可,【從】數據庫數據會進行寫入,無需重新配置my.cnf。【這里的主機宕機方案指的是:主機很長時間無法啟動】

4、原理:MySQL從庫上有一個IO線程負責從主庫取binlog寫到本地,另外有一個SQL線程負責執行這些本地值日,實現命令重做

4.1)如果發生宕機,則主和從都需要重復配置mysql-bin-0000X,change master ,。。。語句,然后start slave; show slave status

5、步驟:

一、准備工作

系統:CentOS

軟件包:mysql-5.6.22.tar.gz

master服務器:192.168.1.112

slave服務器1:192.168.1.102

slave服務器2:192.168.1.104



二、修改master服務器配置

vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin #必選項,啟用二進制日志,值為日志文件名前綴,該日志文件存儲位置為mysql數據庫目錄

server-id=112 #必選項,服務器唯一ID,默認是1,一般取IP最后一段

binlog-do-db=mydb #可選項,需要同步的數據庫,如果沒有本行,即表示同步所有的數據庫

binlog-ignore-db=mysql #可選項,被忽略的數據庫



三、修改slave服務器1配置

vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin #可選項,啟用二進制日志,可是主庫宕機后升級從庫為主庫時仍然需要設置,所以現在一起啟用也可以

server-id=102 #必選項,服務器唯一ID

replicate-do-db=mydb #可選項,需要同步的數據庫名,不寫本行表示同步所有的數據庫



四、重啟所有服務器上的mysql服務

建議先手動同步一下主從服務器中要備份的數據庫

service mysqld restart #如果mysql沒有配置為系統服務,命令為/etc/init.d/mysql restart



五、在master服務器上建立用於同步的賬戶並授權slave

mysql -u root -p

Enter password:root

mysql>create user 'mymaster'@'%' identified by 'mymaster';

mysql>grant replication slave on *.* to 'mymaster'@'%' identified by 'mymaster';#一般不用root賬號,%表示所有從庫都可以連,也可以指定從庫IP增強安全性



六、登錄master服務器的mysql,查看master狀態

mysql>show master status;

   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000001 |      120 |              |                  |
   +------------------+----------+--------------+------------------+



七、配置兩台slave服務器

mysql>change master to master_host='192.168.1.112',master_user='mymaster',master_password='mymaster',master_log_file='mysql-bin.000001',master_log_pos=120;#連接master

mysql>start slave; #啟動slave的復制功能



八、登錄slave的mysql,查看從庫狀態

mysql>show slave status\G; #以下是部分結果

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

Slave_IO_State: Waiting for master to send event#從庫狀態,已連上主庫

Master_Host: 192.168.1.112#master地址

Master_User: mymaster#master用戶

Master_Port: 3306#master端口

Connect_Retry: 60#重試時間,默認是60秒

Master_Log_File: mysql-bin.000001#master的binlog文件名

Read_Master_Log_Pos: 1556#同步讀取二進制日志的位置,大於等於Exec_Master_Log_Pos

Slave_IO_Running: Yes#必須為Yes,此線程把master段的日志寫到本地

Slave_SQL_Running: Yes#必須為Yes,此線程把寫到本地的日志應用於數據庫

Replicate_Do_DB:#同步數據庫名(如果有)

Replicate_Ignore_DB: #忽略數據庫名(如果有)

Exec_Master_Log_Pos: 1556#執行同步命令的位置

Last_IO_Errno: 0#最近IO出錯位置

Last_IO_Error: #最近IO出錯信息

Last_SQL_Errno: 0#最近SQL出錯位置

Last_SQL_Error: #最近SQL出錯信息

Master_Server_Id: 112#master服務器ID

Master_Info_File: /data/mysqldb/master.info#master.info文件位置,位於該slave中

1 row in set (0.00 sec)

如果Slave_IO_Running和Slave_SQL_Running均為Yes,則slave配置完成



九、主從服務器測試

在master中創建數據庫,創建表,進行增刪改操作都會被同步到所有slave中



十、主庫宕機解決方案

假設發生了突發事件,master宕機,現在的需求是要將192.168.1.102提升為主庫,另外一個為從庫

步驟:

1.確保所有的relay log全部更新完畢,在每個從庫上執行stop slave io_thread; show processlist;直到看到Has read all relay log,則表

示從庫更新都執行完畢了

2.登陸所有從庫,查看master.info文件,對比選擇pos最大的作為新的主庫,這里我們選擇192.168.1.102為新的主庫

3.登陸192.168.1.102,執行stop slave; 並進入數據庫目錄,刪除master.info和relay-log.info文件, 配置my.cnf文件,開啟log-bin,如果有

log-slaves-updates和read-only則要注釋掉,執行reset master

4.創建用於同步的用戶並授權slave,同第五大步驟

5.登錄另外一台從庫,執行stop slave停止同步

6.根據第七大步驟連接到新的主庫

7.執行start slave;

8.修改新的master數據,測試slave是否同步更新



十一、其他

1.如果修改了主服務器的配置,記得刪除從服務器上的master.info文件。否則從服務器使用的還是老配置,可能會導致錯誤。

2.如果你想使用復制數據文件的方式來備份數據庫,只要在從服務器上的mysql命令行先鍵入stop slave;然后復制數據庫文件,復制

好了,再 在mysql命令行鍵入start slave;啟動從服務器,這樣就即備份了數據有保證了數據完整性,而且整個過程中主服務器的

mysql無需停止。並且如果在此期間master的數據有改動,在下次start slave時數據也會同步更新過來

3.Slave_IO_State的取值

空 //復制沒有啟動

Connecting to master//沒有連接上master

Waiting for master to send event//已經連上

4.雙機互備則是兩個mysql同時配置為master及slave

5.主服務器上的相關命令:

show master status

show slave hosts

show {master|binary} logs

show binlog events

purge {master|binary} logs to 'log_name'

purge {master|binary} logs before 'date'

reset master(老版本flush master)

set sql_log_bin={0|1}

6.從服務器上的相關命令

start slave

stop slave

stop slave io_thread

start slave is_thread

stop slave sql_thread

start slave sql_thread

reset slave

SET GLOBAL SQL_SLAVE_SKIP_COUNTER

load data from master

show slave status(SUPER,REPLICATION CLIENT)

CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= #動態改變master信息

PURGE MASTER [before 'date'] #刪除master端已同步過的日志

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM