第16章捅膘、復(fù)制

查看服務(wù)器環(huán)境

主從兩臺(tái)MySQL服務(wù)器均使用以下環(huán)境添祸。

shell > lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.3.1611 (Core) 
Release:        7.3.1611
Codename:       Core

查看MySQL版本

shell > mysql -u root -p
// 服務(wù)器 A
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 128
Server version: 5.7.18-log MySQL Community Server (GPL)
// 服務(wù)器 B
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 5.7.19-log MySQL Community Server (GPL)

觀察到服務(wù)器版本略有差異,應(yīng)用在生產(chǎn)環(huán)境時(shí)最好將MySQL的版本保持一致篓跛。最不濟(jì)也要保證前兩位(5.7)版本保持一致,不要出現(xiàn)主(5.7)從(5.1)這種跨版本的情況坦刀。

設(shè)置復(fù)制主機(jī)配置

要配置主機(jī)以使用基于二進(jìn)制日志文件位置的復(fù)制愧沟,您必須啟用二進(jìn)制日志記錄并建立唯一的服務(wù)器ID

shell > service mysqld stop

關(guān)閉 mysqld 服務(wù) 并 編輯 my.cnf 鲤遥,配置 server-id 時(shí)需要注意:此ID用于標(biāo)識(shí)組內(nèi)的各個(gè)服務(wù)器沐寺,并且必須為1到(2 32)-1 之間的正整數(shù)。

[mysqld]
log-bin             = mysql-bin
server-id           = 1 
read-only           = 0         # 主庫(kù)讀寫(xiě)都可以
binlog-do-db        = test      # 需要備份的庫(kù)盖奈,多個(gè)庫(kù)寫(xiě)多行
binlog-ignore-db    = mysql     # 無(wú)需備份的庫(kù)混坞,多個(gè)庫(kù)寫(xiě)多行

注意:test 庫(kù)是一個(gè)新庫(kù)。采用新庫(kù)的目的是避免主從庫(kù)的結(jié)構(gòu)、數(shù)據(jù)的不同導(dǎo)致主從復(fù)制失敗究孕。實(shí)際在生產(chǎn)環(huán)境下啥酱,主從庫(kù)結(jié)構(gòu)數(shù)據(jù)同步這步是漏不掉的。

創(chuàng)建用戶(hù)進(jìn)行復(fù)制

任何一個(gè)已被授予 REPLICATION SLAVE 權(quán)限的用戶(hù)都可以連接到主機(jī)并執(zhí)行復(fù)制操作厨诸∠庖螅可以專(zhuān)門(mén)為為每個(gè)從機(jī)創(chuàng)建復(fù)制帳戶(hù),也可以多個(gè)從機(jī)使用一個(gè)帳戶(hù)微酬。但需要注意的是僅授予其復(fù)制過(guò)程中需要的權(quán)限(白名單原則)绘趋,以減少因此引入的危害。

[mysql] > CREATE USER 'repl'@'slave-ip-address' IDENTIFIED BY 'slave-password';
[mysql] > GRANT REPLICATION SLAVE ON *.* TO 'repl'@'slave-ip-address';

需要注意:
slave-ip-address 表示 從機(jī)服務(wù)器的ip地址颗管;
slave-password 表示 從機(jī)新用戶(hù)的密碼陷遮;

復(fù)制主二進(jìn)制日志坐標(biāo)

MySQL [(none)]> use mysql;
MySQL [mysql]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000016 |      154 | test         |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

生成數(shù)據(jù)快照

使用mysqldump創(chuàng)建數(shù)據(jù)快照。當(dāng)主庫(kù)與從庫(kù)之間信息不對(duì)等時(shí)垦江,可以在啟動(dòng)復(fù)制之前先將主庫(kù)數(shù)據(jù)導(dǎo)入到從庫(kù)帽馋。

mysqldump -u root -p --databases test --master-data > dbdump.db
  • --databases test表示只選擇 test 庫(kù)
  • --ignore-table 選項(xiàng)排除數(shù)據(jù)庫(kù)中的所有表 。
  • 更多信息可以參考鏈接:選擇數(shù)據(jù)快照的方法疫粥。

設(shè)置復(fù)制從站

[mysqld]
server-id           = 2 

要注意 server-id與其它主機(jī)或從機(jī)均不同茬斧。修改完需要重啟mysqld」4可以不啟用該從機(jī)的二進(jìn)制日志功能项秉,除非它需要作為其它從機(jī)的主機(jī)。

在從站上設(shè)置主站配置

要設(shè)置從站與主站進(jìn)行通信以進(jìn)行復(fù)制慷彤,請(qǐng)使用必要的連接信息配置從站娄蔼。為此,請(qǐng)?jiān)趶恼旧蠄?zhí)行以下語(yǔ)句底哗,將選項(xiàng)值替換為與系統(tǒng)相關(guān)的實(shí)際值:

MySQL [mysql]> CHANGE MASTER TO
    -> MASTER_HOST = '主庫(kù)IP地址',
    -> MASTER_USER = 'repl',
    -> MASTER_PASSWORD = '主庫(kù)用戶(hù)repl的密碼',
    -> MASTER_LOG_FILE = 'mysql-bin.000016',
    -> MASTER_LOG_POS = 154;
Query OK, 0 rows affected, 2 warnings (0.04 sec)

MASTER_LOG_FILEMASTER_LOG_POS可見(jiàn)上面復(fù)制主二進(jìn)制日志坐標(biāo)查詢(xún)出的結(jié)果岁诉。

最后啟動(dòng)從服務(wù)器,執(zhí)行此過(guò)程后跋选,從服務(wù)器連接到主服務(wù)器涕癣,并復(fù)制從快照?qǐng)?zhí)行以來(lái)在主服務(wù)器上發(fā)生的任何更新。

MySQL [mysql]> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

最后檢查是否主從復(fù)制配置生效

查看從機(jī)的狀態(tài)前标,如果Slave_IO_RunningSlave_SQL_Running都是Yes則說(shuō)明主從配置成功坠韩。

MySQL [mysql]> SHOW SLAVE STATUS\G;

//...
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
//...

如果出現(xiàn)一直Connecting則需要進(jìn)行排查。查看從機(jī)的錯(cuò)誤日志炼列,位置可以通過(guò)查看文件/etc/my.cnf得到錯(cuò)誤日志的位置只搁。

 tail -f /data/mysql/mysql-error.log

2017-08-07T09:29:39.327901Z 18 [ERROR] Slave I/O for channel '': error connecting to master 'repl@47.**.**.**:3306' - retry-time: 60  retries: 38, Error_code: 1130

遇到錯(cuò)誤可以查看MySQL錯(cuò)誤碼清單(服務(wù)端)MySQL錯(cuò)誤清單(客戶(hù)端)依據(jù)錯(cuò)誤碼可以方便的定位錯(cuò)誤俭尖。

我的錯(cuò)誤排查過(guò)程

Error_code: 1130

我遇到的錯(cuò)誤是Error_code: 1130氢惋,對(duì)應(yīng)的解釋是Message: Host '%s' is not allowed to connect to this MySQL server洞翩。

原因是我配置連接主庫(kù)時(shí),我錄入的是從庫(kù)的ip地址焰望。所以導(dǎo)致從庫(kù)嘗試連接從庫(kù)骚亿,但是使用的是從庫(kù)不存在的用戶(hù)。所以即報(bào)了上述錯(cuò)誤柿估。

Error_code: 2003

修改完上述問(wèn)題后循未,又出現(xiàn)Error_code: 2003,對(duì)應(yīng)的解釋是Message: Can't connect to MySQL server on '%s' (%d)秫舌。

1)檢查主機(jī)是否開(kāi)啟tcp連接的妖。

lsof -i tcp:3306

如果沒(méi)有tcp連接,則需要去/etc/my.cnf中設(shè)置bind-address = 0.0.0.0足陨。

2)檢查主機(jī)防火墻是否攔截了該連接嫂粟。

service iptables stop

在測(cè)試遠(yuǎn)程連接mysql -u repl@'%' -p -P3306 -h 47.**.**.**;,登錄正常墨缘。

無(wú)論是測(cè)試環(huán)境還是生產(chǎn)環(huán)境星虹,關(guān)閉iptables只為取悅mysql都是不恰當(dāng)?shù)淖龇āK晕覀冃枰獮樘囟ǖ?code>ip地址開(kāi)放3306端口镊讼,有關(guān)安全方面都建議使用最小權(quán)限原則(白名單)宽涌。

# 僅允許指定ip地址
iptables -A INPUT -p tcp --dport 3306 -s 47.**.**.**  -j ACCEPT
# 保存規(guī)則
/sbin/service iptables save 
# 重啟iptables
service iptables restart
主從復(fù)制測(cè)試截圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玩裙,一起剝皮案震驚了整個(gè)濱河市兼贸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吃溅,老刑警劉巖溶诞,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異决侈,居然都是意外死亡螺垢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)赖歌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)枉圃,“玉大人,你說(shuō)我怎么就攤上這事俏站⊙镀眩” “怎么了痊土?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵肄扎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)犯祠,這世上最難降的妖魔是什么旭等? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮衡载,結(jié)果婚禮上搔耕,老公的妹妹穿的比我還像新娘。我一直安慰自己痰娱,他們只是感情好弃榨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著梨睁,像睡著了一般鲸睛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坡贺,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天官辈,我揣著相機(jī)與錄音,去河邊找鬼遍坟。 笑死拳亿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的愿伴。 我是一名探鬼主播肺魁,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼公般!你這毒婦竟也來(lái)了万搔?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤官帘,失蹤者是張志新(化名)和其女友劉穎瞬雹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體刽虹,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酗捌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涌哲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胖缤。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖阀圾,靈堂內(nèi)的尸體忽然破棺而出哪廓,到底是詐尸還是另有隱情,我是刑警寧澤初烘,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布涡真,位于F島的核電站分俯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哆料。R本人自食惡果不足惜缸剪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望东亦。 院中可真熱鬧杏节,春花似錦、人聲如沸典阵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)壮啊。三九已至卒稳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間他巨,已是汗流浹背充坑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留染突,地道東北人捻爷。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像份企,于是被迫代替她去往敵國(guó)和親也榄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容