主從配置實踐留檔and主從不同步問題解決

背景

是這樣的,我們正式環(huán)境已經跑了很久的主從和讀寫分離,而測試環(huán)境一直只有一個數據庫在跑,正式環(huán)境出現好幾次主從延遲,但測試環(huán)境沒辦法復現,所以想讓測試環(huán)境盡可能保持跟正式環(huán)境一致,因此,進行了一次主從復制配置。

環(huán)境:

我們的測試環(huán)境有兩個數據庫,一個在正常讀寫,另一個已搭建但未接入使用,原來在用的作為主庫(IP就叫10.10.10.1),未接入的作為從庫(IP就叫10.10.10.2)

數據庫版本:5.7.24-27-log


下面為主從配置詳細步驟

step1、主庫授權從庫

主庫執(zhí)行

MySQL>GRANT REPLICATI ON SLAVEON *.* TO 'rep1'@'10.10.10.2'? IDENTIFIED BY 'passwordxx';

說明:

ON 后面的參數為指定可復制至從庫的數據庫/表,星號表示復制全部,如果想要部分數據庫或表不復制,第一個*可改成指定數據庫名稱,第二個可改成指定表名稱;

亦可進入mysql安裝目錄的etc文件夾,修改 my.cnf 文件,設置忽略復制指定表:replicate_wild_ignore_table=test.% (忽略test庫所有表,有其他需要忽略,則添加一行該配置)

rep1—— 為 設置授權用戶名

10.10.10.2——從庫服務器IP


step2、記錄主庫信息

主庫執(zhí)行

MySQL>show master status;

記住File、Position、Executed_Gtid_Set的值

說明:

這里的File為主庫binlog日志的文件名,Position為該命令所在的位置

如果記錄position后,又不小心在主庫執(zhí)行了sql,則position是會變化的,可能會導致設置失敗,重來即可;

step3、將從庫設置為只讀

進入從庫安裝目錄,進入etc目錄,點擊修改配置文件my.cnf,添加一行

read-only

step4、停止從庫

從庫執(zhí)行

MySQL>stop slave;

step5、從庫設置同步

從庫執(zhí)行

MySQL>change master to master_host='10.10.10.1',master_user='rep1',master_password='passwordxx',master_log_file='mysql-bin.000004',master_log_pos=198477;

說明

里面各參數的值對應上面各步驟得到的值;

如果主庫mysql服務的端口不是默認端口,則設置同步時,需要指定主庫端口:

MySQL>change mastertomaster_host='10.10.10.1',master_user='rep1',master_password='passwordxx',master_port=3377,master_log_file='mysql-bin.000004',master_log_pos=198477;

step6、啟動從數據庫

從庫執(zhí)行

MySQL>start slave;

step7、檢查同步是否配置成功

從數據庫執(zhí)行

MySQL>show slave status\G;

檢查Slave_IO_Running和Slave_SQL_Running必須為yes;

成功狀態(tài)時,Slave_SQL_Running_State會提示 Slave has read all relay log; waiting for more updates

以上則主從復制配置完成。

上面是針對主從都是新建立的情況下的設置,如果主庫原來正在運行,需要增加從庫,則在配置前需要先數據遷移。

主庫數據遷移

如果主數據庫已經存在數據,需要把binlog文件手動遷移到從數據庫,否則是不會自動把已有的數據同步到從庫的。可以用mysqldump導入導出的方式,但我這邊數據量比較大,用這種方式提示超時了,而且用這種方式,貌似需要在從庫手動創(chuàng)建數據庫,所以這里用的是直接打包主庫數據復制到從庫的方式。

1、將主庫服務器改成只讀模式(不改成只讀的話,可能主庫會繼續(xù)增加數據,遷移數據就會丟失),登錄主數據庫,執(zhí)行

MySQL >flush tables with read lock;

2、主庫所在服務器,進入mysql數據文件夾所在目錄,我這邊是/data,用tar命令將該目錄下全部文件打包

# tar -zcpf mysqldata.tar.gz ./mysql33077_data/*

3、從庫所在服務器,進入同樣的目錄,解壓并覆蓋原數據

# tar -zxvf mysqldata.tar.gz

4、停止從數據庫服務

我這邊試了多種正常停止數據庫服務的命令,比如 service mysql stop、/etc/inint.d/mysqld stop、service mysqld stop、systemctl stop mysqld都不行,mysqladmin shutdown由于不知道服務器密碼(用跳板機登錄的)沒辦法驗證,所以用強制kill服務的方式停止了

(這里補充一下,在同事的幫助下,我了解到停止數據庫的方法依賴數據庫的啟動方式,而啟動方式是根據數據庫的安裝方式的,這里數據庫的安裝我還沒有怎么實踐,了解有限。數據庫的啟動方式有serivce啟動,my.cnf配置文件啟動,inint.d腳本啟動等等,我這用的是my.cnf配置文件啟動的,可能描述有誤,請糾正)

從庫服務器,先查看mysql服務進程

# ps -ef|grep mysql

kill掉進程

# kill -9 24524

5、刪除從庫數據根目錄下的auto.cnf文件

因為我是用復制整個數據庫數據文件夾的方式遷移數據的,會把主庫特定的一些特性文件也復制過來,這些會導致從庫的uuid與主庫一樣或者數據查詢不到,導致異常

auto.cnf文件

6、啟動從數據庫服務

(可以通過查看服務器操作歷史查看數據庫啟動方式~方便快捷!命令:history |grep mysql)

# /usr/local/mysql33077/bin/mysqld --defaults-file=/usr/local/mysql33077/etc/my.cnf --basedir=/usr/local/mysql33077 --datadir=/data/mysql33077_data --plugin-dir=/usr/local/mysql33077/lib/mysql/plugin --user=mysql --log-error=/usr/local/mysql33077/mysqld.log --pid-file=vbj-easychange-b1-20190620-2.pid --socket=/usr/local/mysql33077/tmp/mysql.sock --port=33077

1

7、重新配置同步并啟動從庫

(其實可以先遷移數據,再配置從庫同步的,但我看教程的時候人家是先同步,就跟著做了,不過首先一定要先停止主庫的寫入,不然sql執(zhí)行位置就會找不到)

MySQL >change master to master_host='10.10.10.1',master_user='rep1',master_password='passwordxx',master_port=3377,master_log_file='mysql-bin.000004',master_log_pos=198477;

可以看到uuid正常了,從庫狀態(tài)也正常了

8、主數據庫解除只讀

主庫執(zhí)行

MySQL >unlock tables;MySQL >flush privileges;

9、驗證主從是否可以同步,在主數據庫插入一條數據,查詢從數據庫是否同步新增

遇到的問題和解決方法

1、數據遷移后,在到從庫能查詢到數據庫,但查詢表數據失敗,提示

table doesnt exits;

解決方案:重啟mysql服務,啟動前記得刪除auto.cnf文件,因為這個文件里面的信息是主庫的,刪除重啟后會自動生成新的

2、flush tables with read lock 設置只讀后,剛開始是生效的,沒多久自動解鎖了

這個出現的原因我沒找到答案,按照很多網上教程,這個命令應該可以可靠生效的,大概是這個原因,導致我前面一次數據遷移后,主庫還有新的寫入,從庫的sql始終執(zhí)行不到最新的,gtid是錯的,還得重置gtid,問題是數據已經不一致了。。。只好重新配置主從

解決方案:改成通過參數設置

MySQL >setglobal read_only=1;MySQL >flush privileges;

不過這個方式設置的只讀對root用戶是無效的,所以配置后千萬小心不要root用戶在主庫做插入,我就是誤操作了。。。然后又重來,當然可能可以不用重來的,但我沒找到更方便的解決方案,請大神指教~

以上,可能有很多說得不對的或者描述不妥的,請一一指出~

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容