MySQL主從庫(kù)配置以及常見問題

此文檔包含兩部分:

一、MySQL主從庫(kù)的配置???? 二、常見問題以及解決方法


一、MySQL主從庫(kù)的配置


說明:

???????? 1、此文檔記錄的是MySQL主從庫(kù)最常用的配置方法,即:一主一從(或一主多從)。

?????????????????? 切記:此種配置一定是主寫從讀。

???????? 2、MySQL主從庫(kù)的原理,這里就不介紹了,可以自行百度,這個(gè)網(wǎng)址也有詳細(xì)說明:

?????????????????? http://blog.csdn.net/hguisu/article/details/7325124/

???????? 3、本次配置環(huán)境:

?????????????????? (1)VMware虛擬機(jī);

?????????????????? (2)虛擬兩臺(tái)主機(jī):

?????????????????? ???????? 主機(jī)(master):系統(tǒng):ubuntu-16.04-desktop-amd64.iso; IP:192.168.142.166

?????????????????? ???????? 主機(jī)(slave):? 系統(tǒng):ubuntu-16.04-desktop-amd64.iso; IP:192.168.142.167

?????????????????? (3)MySQL版本:mysql-server_5.6.26-1ubuntu14.04_amd64.deb-bundle.tar

???????? 4、若僅想看主從庫(kù)的配置,可直接查看第五步、第六步。


第一步:安裝MySQL(已安裝則忽略)


???????? 分別在兩臺(tái)主機(jī)安裝MySQL:

???????? 1、cd

?????? 2、mkdir mysql-deb

?????? 3、cd mysql-deb

?????? 4、下載mysql-server_5.6.26-1ubuntu14.04_amd64.deb-bundle.tar到當(dāng)前目錄

?????? 5、tar -xf mysql-server_5.6.26-1ubuntu14.04_amd64.deb-bundle.tar

?????? 6、安裝支持包:sudo apt-get install libaio1

?????? 7、sudo dpkg -i mysql-common_5.6.26-1ubuntu14.04_amd64.deb

?????? 8、sudo dpkg -i mysql-community-server_5.6.26-1ubuntu14.04_amd64.deb

?????? 9、sudo dpkg -i mysql-community-client_5.6.26-1ubuntu14.04_amd64.deb


?????? 啟動(dòng)、停止MySQL命令:

?????? /etc/init.d/mysqlstart

?????? /etc/init.d/mysqlstop


?????? 在主庫(kù)(192.168.142.166)配置文件中注釋bind-address = 127.0.0.1 (否則從???????? 庫(kù)不能遠(yuǎn)程登錄主庫(kù))

?????? cd/etc/mysql

?????? vi my.cnf

?????? # bind-address= 127.0.0.1

第二步:在主庫(kù)建立數(shù)據(jù)庫(kù)(已有庫(kù)則忽略)

???????? 1、mysql??-uroot??-p

???????? 2、create database osyunweidb CHARACTER SET'utf8mb4' COLLATE?????????????????????????? 'utf8mb4_general_ci';

?????? 3、use osyunweidb;

?????? 4、CREATE TABLE `userinfo` (

???????????? ?`id` int(20) NOT NULL AUTO_INCREMENT,

???????????? ?`name` char(20) DEFAULT NULL,

???????????? ?`age` int(11) DEFAULT NULL,

????????????? ?`sex` char(2) DEFAULT NULL,

????????????? ?PRIMARY KEY (`id`)

????????????? );

???????? 5、INSERT INTO `userinfo`(name,age,sex) VALUES ( 'adai',18,'1');


第三步:建立同步用戶——從庫(kù)連接登陸主庫(kù)的用戶(已有用戶則忽略)

???????? 1、mysql??-uroot??-p

???????? 2、創(chuàng)建用戶:

???????? GRANTUSAGE ON *.* TO 'osyunweidbbak '@'192.168.142.167' IDENTIFIED BY '123456'????????? WITH GRANT OPTION;

create user 'osyunweidbbak'@'192.168.142.167' identified by 'qwe123';? —— 8.0;

???????? 用戶:osyunweidbbak

???????? 密碼:123456

???????? 只能從主機(jī)192.168.142.167(從庫(kù)IP)遠(yuǎn)程登錄

???????? 3、查看用戶權(quán)限:

???????? showgrants for osyunweidbbak @'192.168.142.167';

???????? 顯示:


只有 USAGE權(quán)限:只允許登錄--其它什么也不允許做。

?????? 4、更改用戶osyunweidbbak的權(quán)限:

???????? grantreplication slave on *.* to 'osyunweidbbak '@'192.168.142.167' identified by'123456'?? with grant option;

grant replication slave on *.* to 'osyunweidbbak'@'192.168.142.167';——8.0

???????? 顯示:


授權(quán)用戶osyunweidbbak只能從192.168.142.167這個(gè)IP訪問主庫(kù)(192.168.142.166)???? 的數(shù)據(jù)庫(kù),并且只具有數(shù)據(jù)庫(kù)備份的權(quán)限。

???????? 5、刷新系統(tǒng)授權(quán)表

?????????????????? flushprivileges;?????

flush privileges;——8.0

?????? 6、測(cè)試在從庫(kù)服務(wù)器上登錄到主庫(kù)

???????? mysql-u?osyunweidbbak -h 192.168.142.166?-p




第四步:把主庫(kù)的數(shù)據(jù)庫(kù)導(dǎo)入到從庫(kù)中

???????? 1、在主庫(kù)導(dǎo)出數(shù)據(jù)庫(kù)(192.168.142.166)

???????? 進(jìn)入mysql 客戶端程序和腳本目錄

???????? cd/usr/bin

?????? flushtables with read lock;

?????? mysqldump-u root -p?osyunweidb > /home/osyunweidbbak.sql

?????? unlocktables;

???????? 2、導(dǎo)入數(shù)據(jù)到從庫(kù)(192.168.142.167)

???????? mysql??-u root -p

?????? source??/home/osyunweidbbak.sql


第五步:配置主庫(kù)(192.168.142.166)的my.cnf文件

???????? 1、cd /etc/mysql

???????? 2、vi my.cnf

???????? 配置如圖:


注意:紅色框部分。

說明:

???????? (1)server-id=1

???????? #設(shè)置服務(wù)器id,1表示主服務(wù)器(主庫(kù)),注意:如果原來的配置文件中已經(jīng)有這一行,????? 就不用再添加了。


(2)log_bin=mysql-bin

???????? #啟動(dòng)MySQ二進(jìn)制日志系統(tǒng),注意:如果原來的配置文件中已經(jīng)有這一行,就不用再?? 添加了。


(3)binlog-do-db=osyunweidb

???????? #需要同步的數(shù)據(jù)庫(kù)名,如果有多個(gè)數(shù)據(jù)庫(kù),可重復(fù)此參數(shù),每個(gè)數(shù)據(jù)庫(kù)一行。


(4)binlog-ignore-db=mysql

???????? #不需要同步的數(shù)據(jù)庫(kù)名,如果有多個(gè)數(shù)據(jù)庫(kù),可重復(fù)此參數(shù),每個(gè)數(shù)據(jù)庫(kù)一行。

???????? 3、重啟MySQL

???????? /etc/init.d/mysql restart

???????? 4、查看主庫(kù)信息

???????? mysql -u root -p

???????? show master status;

???????? 顯示:


說明:與my.cnf配置的參數(shù)一致,同步數(shù)據(jù)庫(kù):osyunweidb,不同步數(shù)據(jù)庫(kù): mysql;???????? 特別注意:這里需要記下File和Position的值,這是從庫(kù)同步主庫(kù)數(shù)據(jù)開始的同步點(diǎn)。

第六步:配置從庫(kù)(192.168.142.167)的my.cnf文件

???????? 1、cd /etc/mysql

???????? 2、vi my.cnf

???????? 配置如圖:


注意:紅色框部分。

???????? 說明:

???????? (1)server-id=2

???????? #設(shè)置服務(wù)器id,2表示從服務(wù)器(從庫(kù)),注意:如果原來的配置文件中已經(jīng)有這一行,????? 就不用再添加了。


(2)replicate_wild_do_table = osyunweidb.%

???????? #需要同步的數(shù)據(jù)庫(kù)名,如果有多個(gè)數(shù)據(jù)庫(kù),可重復(fù)此參數(shù),每個(gè)數(shù)據(jù)庫(kù)一行。


(3)replicate_wild_ignore_table=mysql?.%

???????? #不需要同步的數(shù)據(jù)庫(kù)名,如果有多個(gè)數(shù)據(jù)庫(kù),可重復(fù)此參數(shù),每個(gè)數(shù)據(jù)庫(kù)一行。

???????? (4)特別注意,注釋掉的兩行:

???????? replicate-do-db=osyunweidb

???????? replicate-ignore-db=mysql

???????? 從庫(kù)的配置文件不可用這兩個(gè)參數(shù),在同步數(shù)據(jù)的時(shí)候會(huì)有隱患,參考“二、常見問???? 題以及解決方法”的說明。

???????? (5)從庫(kù)不需要開啟二進(jìn)制日志,除非有必要:如,此從庫(kù)又作為別的從庫(kù)的主庫(kù),? 或者此從庫(kù)需要增量備份。

???????? (6)MySQL 5.1.7版本之后,已經(jīng)不支持把主庫(kù)(master)配置屬性,如:

?????? master_host='192.168.142.166', master_user='osyunweidbbak',

???????? master_password='123456', master_log_file='mysql-bin.000006'?,

???????? master_log_pos=44884752

???????? 寫入my.cnf配置文件中了,只把要同步的數(shù)據(jù)庫(kù)和要忽略的數(shù)據(jù)庫(kù)寫入my.cnf即可。

???????? 3、重啟MySQL

???????? /etc/init.d/mysqlrestart

???????? 4、mysql -uroot -p

???????? 5、停止slave同步進(jìn)程

???????? stop slave;

???????? 6、執(zhí)行同步語句(設(shè)置主庫(kù)IP、登錄用戶名密碼、同步文件、同步點(diǎn))

???????? change master to? master_host='192.168.142.166',master_user='osyunweidbbak',master_password='123456',???????? master_log_file=' mysql-bin.000006'?,master_log_pos=44884752;

???????? 注意:這里的master_log_file=' mysql-bin.000006'?,master_log_pos=44884752 就是前面在????????? 主庫(kù)查看并記錄下來的File和Position的值。

???????? 7、start slave;

???????? 8、查看slave同步信息

???????? show slave status\G? (用\G結(jié)尾而不是分號(hào)結(jié)尾,按行顯示結(jié)果)

???????? 顯示:


注意查看:

?????? Slave_IO_Running: Yes

?????? Slave_SQL_Running: Yes

??????

以上這兩個(gè)參數(shù)的值為Yes,即說明配置成功,而正在運(yùn)行。

?????? 注意核對(duì)其他信息是否正確。

出現(xiàn)錯(cuò)誤:ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

解決:加參數(shù):

mysql -u root -p --get-server-public-key

change master to? master_host='192.168.142.166',master_user='osyunweidbbak',master_password='123456',???????? master_log_file=' mysql-bin.000006'?,master_log_pos=44884752,?get_master_public_key=1;

第七步:測(cè)試同步是否成功以及一般穩(wěn)定性

???????? 手工測(cè)試只能簡(jiǎn)單的插入、刪除或更新幾條數(shù)據(jù),所以可以寫幾行代碼隨機(jī)、長(zhǎng)時(shí)間、???????? 大批量的對(duì)主庫(kù)插入、刪除或更新數(shù)據(jù);然后查看主庫(kù)和從庫(kù)的數(shù)據(jù)一致性(簡(jiǎn)單的只???? 能看總記錄數(shù)是否一致了)。

???????? 結(jié)果如下(從前一天晚上6點(diǎn)運(yùn)行到次日8點(diǎn)):


可以看到,不管是插入數(shù)據(jù)還是刪除數(shù)據(jù)操作,主庫(kù)、從庫(kù) userinfo表的記錄數(shù)都保???? 持一致。數(shù)據(jù)量已經(jīng)有28萬了。

OK,主從庫(kù)配置完畢。


二、常見問題以及解決方法


1、從庫(kù)沒有同步主庫(kù)的數(shù)據(jù)

分兩種情況:

1)從庫(kù)在執(zhí)行SQL語句時(shí)發(fā)生錯(cuò)誤

默認(rèn)下從庫(kù)在同步數(shù)據(jù)執(zhí)行SQL語句時(shí),只要發(fā)生錯(cuò)誤,就會(huì)停止同步,不會(huì)跳過;

(當(dāng)然主庫(kù)本就沒有執(zhí)行成功的SQL語句,不會(huì)影響從庫(kù)同步)。

查看方法:

①主服務(wù)器(主庫(kù))查看進(jìn)程是否Sleep太多:

show processlist;

?②查看主庫(kù)狀態(tài)是否正常:

show master status;

③查看從庫(kù)狀態(tài)信息:

show slave status\G

顯示:

Slave_IO_Running: Yes

Slave_SQL_Running: No

Last_SQL_Error: Error 'PROCEDURE BK.zoucmdoes not exist' on query. Default database: 'BK'. Query: 'drop procedure zoucm'

可見slave沒有同步,SQL報(bào)錯(cuò)。


解決方法:

如果數(shù)據(jù)可控的情況下,可以忽略錯(cuò)誤,繼續(xù)同步:

1、停止slave服務(wù)器的主從同步:

stop slave;

2、跳過一步錯(cuò)誤,數(shù)字表示跳過多少步:

set global sql_slave_skip_counter =1;

3、開啟slave服務(wù):

start slave;


如果數(shù)據(jù)已經(jīng)不可控,可以考慮重做主從庫(kù):

1.先進(jìn)入主庫(kù)(192.168.142.166),鎖表,防止數(shù)據(jù)寫入

flush tables withread lock;

2、備份主庫(kù)數(shù)據(jù):

mysqldump -uroot-p? > mysqlmaster.bak.sql

3、重置主庫(kù)maste

RESET MASTER;

4、查看master狀態(tài),并記錄file和postion

show master status;

5、對(duì)主庫(kù)(192.168.142.166)解鎖表

UNLOCK TABLES;

6、進(jìn)入從庫(kù)(192.168.142.167),停止從庫(kù)的同步狀態(tài)

stop slave;

或者直接停止從庫(kù)mysql服務(wù)

/etc/init.d/mysql stop

7、找到從庫(kù)的中繼日志,把中繼日志相關(guān)的文件都刪除

find / -name mysqld-relay-bin.*

rm -rf ...

7、(在從庫(kù)操作)導(dǎo)入備份數(shù)據(jù)庫(kù)

source mysqlmaster.bak.sql

8、清除同步信息

reset slave all;

9、(在從庫(kù)操作)配置從庫(kù)同步,注意同步點(diǎn),即第4步查看的file和position信息

change master to master_host='192.168.142.166',master_user='osyunweidbbak',master_password='123456',master_log_file='mysql-bin.000006'?,master_log_pos=44884752;

注意:這里的master_log_file=' mysql-bin.000006'?,master_log_pos=44884752

要按實(shí)際的填寫。


10、重新開啟從庫(kù)同步

START SLAVE;

11、(在從庫(kù)操作)查看同步狀態(tài)

show slave status\G

顯示:

Slave_IO_Running:Yes

Slave_SQL_Running:Yes


2)從庫(kù)配置文件中使用參數(shù)replicate-do-db replicate-ignore-db

在配置從庫(kù)的my.cnf文件時(shí),如果使用參replicate-do-db 和replicate-ignore-db 會(huì)導(dǎo)致從庫(kù)同步主庫(kù)數(shù)據(jù)時(shí)忽略掉主庫(kù)的跨庫(kù)更新SQL語句。例如,主庫(kù):

usedb1;

insert intodb2.userinfo(name,age,sex) values ( 'adai',18,'1');

那么從庫(kù)同步時(shí)會(huì)忽略此語句,即不會(huì)同步此數(shù)據(jù)。

所以為了避免此問題,應(yīng)該使用參數(shù):

replicate_wild_do_table = osyunweidb.%

replicate_wild_ignore_table=mysql?.%

配置需要同步和不需要同步的數(shù)據(jù)庫(kù)。


2、從庫(kù)同步狀態(tài)顯示:Slave_IO_Running connecting

這是從庫(kù)無法登陸主庫(kù)。

主要有三個(gè)原因:

(1)網(wǎng)絡(luò)不通

(2)登陸主庫(kù)的賬號(hào)密碼不對(duì)或者權(quán)限問題

(3)position的位置不對(duì)

(4)主庫(kù)的配置文件my.cnf 沒有注釋bind-address = 127.0.0.1

一一檢查即可。

完畢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容