Mysql 主從配置

這篇博客會(huì)詳細(xì)介紹如何配置主從配置懒豹,但重點(diǎn)是想分享如何當(dāng)配置未成功時(shí)蔽挠,如何調(diào)試闸婴。

原文連接(推薦這個(gè)看 比較清晰)

https://www.liutao1995.top/mysql-zhu-cong-pei-zhi-shang/

>相信在很多其他地方也已經(jīng)有關(guān)于如何配置MySQL的相關(guān)知識(shí)介紹栅迄,這里私杜,我也會(huì)把自己配置成功的過(guò)程介紹一下:

一 作用

MySQL主從配置其實(shí)是一個(gè)MySQL增量熱備份技術(shù)号俐。要知道泌豆,MySQL的查詢壓力一般大于寫入壓力,那可以用數(shù)據(jù)庫(kù)主從配置做數(shù)據(jù)分離或者緩存吏饿∽傥#可以用于查詢優(yōu)化。

?二 配置過(guò)程

> 這里我用的是ubuntu14.04版本猪落,mysql的版本是5.7贞远。

?2.1 主從同步前提

1)在做主從同步前必須保證mysql版本兼容(版本相同或者從庫(kù)版本大于主庫(kù))

2)保證同步前數(shù)據(jù)庫(kù)文件必須一致

注釋:從庫(kù)版本大于主庫(kù)版本,這是因?yàn)閿?shù)據(jù)庫(kù)在升級(jí)時(shí)笨忌,有向下兼容蓝仲,所以一般高版本的數(shù)據(jù)可以兼容低版本數(shù)據(jù)庫(kù),反之則不然。但是袱结,這里在做主從同步時(shí)亮隙,最好保證是版本相同,因?yàn)椴⒉灰欢ǜ甙姹揪屯耆嫒莸桶姹緮?shù)據(jù)庫(kù)垢夹,可以自行去數(shù)據(jù)庫(kù)官網(wǎng)查詢溢吻。但是,如果做數(shù)據(jù)遷移時(shí)果元,很有可能就會(huì)一定要求從庫(kù)的版本高于主庫(kù)促王,那么需要事先測(cè)試。

2.2? 開始同步----主數(shù)據(jù)庫(kù)操作

這里為了保證主從數(shù)據(jù)庫(kù)環(huán)境一致而晒,所以我采用vagrant搭建的環(huán)境:ubuntu14.04蝇狼,mysql5.7。

`vagrant init`初始化兩個(gè)虛擬機(jī)欣硼,ip地址分別為:

`192.168.10.2`和`192.168.10.3`题翰,前者是主數(shù)據(jù)庫(kù)所在服務(wù)器,后者是從數(shù)據(jù)庫(kù)所在服務(wù)器诈胜。

1.修改主數(shù)據(jù)庫(kù)的配置文件:(我將主數(shù)據(jù)庫(kù)服務(wù)器名為S2)

找到mysql的配置文件:

```

root@S2:cd /etc/mysql/mysql.conf.d/

root@S2:/etc/mysql/mysql.conf.d# vi mysqld.cnf

```

這里具體的mysql.cnf文件豹障,版本不同,文件名會(huì)有不同焦匈。找到正確的mysql配置修改即可血公。

2 添加配置(如果有被注釋的,直接去掉注釋開啟即可)

[mysqld]下的選項(xiàng)為服務(wù)器端的配置內(nèi)容

```

[mysqld]

pid-file? ? ? ? = /var/run/mysqld/mysqld.pid

socket? ? ? ? ? = /var/run/mysqld/mysqld.sock

datadir? ? ? ? = /var/lib/mysql

log-error? ? ? = /var/log/mysql/error.log

# By default we only accept connections from localhost

#將標(biāo)準(zhǔn)IP地址127.0.0.1 替換為服務(wù)器的IP地址

bind-address? ? = 192.168.10.2

server-id = 1000

log_bin = /var/log/mysql/mysql-bin.log

#表示只備份testdb

binlog_do_db = testdb

```

解釋:

`pid-file`:存放進(jìn)程的pid

`socket`:socket連接

`datadir`:數(shù)據(jù)庫(kù)的目錄文件

`log-error`:錯(cuò)誤日志的路徑

`bind-address`:這臺(tái)服務(wù)器綁定的ip地址(之前已經(jīng)說(shuō)了缓熟,主數(shù)據(jù)庫(kù)服務(wù)器的ip地址是192.168.10.2)

`server-id`:選項(xiàng)標(biāo)識(shí)累魔,當(dāng)前數(shù)據(jù)庫(kù)在集群中的id,范圍從1-2321,主庫(kù)從庫(kù)都必須設(shè)置id够滑,且id不同

`log_bin`:所有在主數(shù)據(jù)庫(kù)中的變更操作都會(huì)被記錄在該文件里垦写,然后從庫(kù)會(huì)將主庫(kù)里的所有變更操作復(fù)制,再在從庫(kù)里執(zhí)行以此達(dá)到和主庫(kù)的數(shù)據(jù)一致

`binlog_do_db `:指定將從主服務(wù)器上復(fù)制的數(shù)據(jù)庫(kù)彰触。您可以通過(guò)為所需的所有數(shù)據(jù)庫(kù)重復(fù)此行來(lái)包含多個(gè)數(shù)據(jù)庫(kù)梯投。當(dāng)然還有很多其他配置情況,具體自行查看

3.退出保存 重啟mysql

完成所有更改后况毅,繼續(xù)保存并退出配置文件,刷新MySQL分蓖。

`sudo service mysql restart`

4.為從庫(kù)配置賬號(hào)和賦予賬號(hào)權(quán)限

打開shell,進(jìn)入mysql中:

`mysql -u root -p`

```

...

//create user '用戶名'@'從庫(kù)ip地址' identified by '用戶密碼';? 創(chuàng)建用戶及密碼

> create user 'slave_1'@'192.168.10.3' identified by 'slave_1';

//grant replication slave on *.* to '上面配置的用戶名'@'上面配置的從庫(kù)ip地址' identified by '上面配置的密碼';? 賦予權(quán)限

>grant replication slave on *.* to 'slave_1'@'192.168.10.3' identified by 'slave_1';

```

?5.刷新MySQL的系統(tǒng)權(quán)限相關(guān)表尔许,否則會(huì)出現(xiàn)拒絕訪問(wèn)

```

mysql>? FLUSH PRIVILEGES;

```

?6.鎖定表么鹤,將主庫(kù)的testdb數(shù)據(jù)庫(kù)導(dǎo)出.sql文件到從庫(kù)中,解鎖

下面提供一種思路:

進(jìn)入主庫(kù)的mysql中:

```

mysql> use testdb;? //進(jìn)入testdb庫(kù)

mysql> FLUSH TABLES WITH READ LOCK;//鎖定數(shù)據(jù)庫(kù)以防止任何新的更改:

```

退出mysql命令行味廊,導(dǎo)出想要導(dǎo)出的數(shù)據(jù)庫(kù)并生成.sql文件:

```

系統(tǒng)命令行

mysqldump -uusername -ppassword --databases testdb>testdb.sql

```

就可以看到當(dāng)前目錄下有一個(gè)testdb.sql文件蒸甜,之后將這個(gè)文件通過(guò)scp的方式傳送到從數(shù)據(jù)庫(kù)所在的服務(wù)器(例如:scp path/newdatabase.sql admin@128.xxx:/tmp)

導(dǎo)出數(shù)據(jù)后棠耕,重新進(jìn)入mysql命令行,完成解鎖

```

> use testdb;

>UNLOCK TABLES;

```

這里需要先完成鎖表再導(dǎo)處數(shù)據(jù)柠新,一是為了保證數(shù)據(jù)的完整性昧辽,不然很有可能部分?jǐn)?shù)據(jù)丟失,二是為了防止被惡意攻擊登颓。

好了,以上就是主數(shù)據(jù)庫(kù)的主要操作了红氯,接下來(lái)看從數(shù)據(jù)庫(kù)如何配置框咙。

2.3? 開始同步----從數(shù)據(jù)庫(kù)操作

> 從數(shù)據(jù)庫(kù)的配置也差不多,需要修改從服務(wù)器上的數(shù)據(jù)庫(kù)配置文件痢甘,然后將從主庫(kù)上的數(shù)據(jù)庫(kù)導(dǎo)入從庫(kù)喇嘱。

我們先把數(shù)據(jù)庫(kù)導(dǎo)入從庫(kù):

1. 進(jìn)入mysql命令行

```

mysql> CREATE DATABASE testdb;//創(chuàng)建數(shù)據(jù)庫(kù)

```

退出命令行模式,系統(tǒng)下運(yùn)行

```

//將之前通過(guò)scp傳過(guò)來(lái)的.sql文件添加到新創(chuàng)建的數(shù)據(jù)庫(kù)中

mysql -u uusername -ppassword testdb CHANGE MASTER TO MASTER_HOST = '192.168.10.2'塞栅,MASTER_USER ='slave_1'者铜,MASTER_PASSWORD ='slave_1',MASTER_LOG_FILE ='mysql-bin.000001'放椰,MASTER_LOG_POS = 107;

```

解釋:

`MASTER_HOST `:主庫(kù)ip地址

`MASTER_USER`:當(dāng)初主庫(kù)給從庫(kù)設(shè)置的訪問(wèn)賬號(hào)

`MASTER_PASSWORD `:訪問(wèn)賬號(hào)密碼

`MASTER_LOG_FILE`:主庫(kù)的log_file(需要查看主庫(kù)的master狀態(tài))

`MASTER_LOG_POS`:主庫(kù)的log_pos(需要查看主庫(kù)的master狀態(tài))

此處的`MASTER_LOG_FILE`和`MASTER_LOG_POS`是主庫(kù)的master狀態(tài)作烟,所以我們需要到主庫(kù)去查看。

* 到主庫(kù)去,進(jìn)入mysql:

mysql> SHOW MASTER STATUS;//查看主數(shù)據(jù)庫(kù)的狀態(tài),之后可以看到下面這個(gè)表

```

mysql> SHOW MASTER STATUS;

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

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

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

| mysql-bin.000001 |? ? ? 107 | newdatabase? |? ? ? ? ? ? ? ? ? |

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

1 row in set (0.00 sec)

```

可以看到砾医,F(xiàn)ile的值就是我們需要在從庫(kù)設(shè)置的MASTER_LOG_FILE拿撩,Position 的值就是我們需要在從庫(kù)設(shè)置的MASTER_LOG_POS

好了,在完成上述change命令后如蚜,它就將當(dāng)前服務(wù)器指定為主服務(wù)器的從屬压恒。通過(guò)用戶名和密碼為從服務(wù)器數(shù)據(jù)庫(kù)提供正確的登錄主服務(wù)器數(shù)據(jù)庫(kù)的憑據(jù) 最后,它讓從服務(wù)器知道從日志文件的哪里開始復(fù)制; 主日志文件和日志位置來(lái)自我們以前記錄的數(shù)字错邦。 有了這個(gè)探赫,你已經(jīng)配置了一個(gè)主服務(wù)器和從服務(wù)器。

接下來(lái)可以去主數(shù)據(jù)庫(kù)中任何為一個(gè)數(shù)據(jù)表添加記錄撬呢,然后查看從數(shù)據(jù)庫(kù)里的數(shù)據(jù)表是否會(huì)產(chǎn)生相應(yīng)的記錄伦吠。

-----------------------------------------------

上面是介紹如何配置主從數(shù)據(jù)庫(kù)的教程。但是大多數(shù)人相信第一次都不一定會(huì)成功倾芝,那么如何解決呢讨勤?下面是排錯(cuò)思路:

之前在進(jìn)入數(shù)據(jù)庫(kù)的配置文件中,相信看到了`log-error? ? ? = /var/log/mysql/error.log`這么一個(gè)選項(xiàng)晨另,所以潭千,當(dāng)發(fā)現(xiàn)經(jīng)過(guò)上面的配置,從庫(kù)沒(méi)有產(chǎn)生正確的響應(yīng)借尿。就去`/var/log/mysql/error.log`文件查看刨晴,下面是我在配置中遇到過(guò)的幾個(gè)問(wèn)題屉来,例如:

```

> cat /var/log/mysql/error.log

```

1130錯(cuò)誤碼:

```

2017-09-21T08:36:51.637972Z 9 [ERROR] Slave I/O for channel '': error connecting to master 'slave_1@192.168.10.2:3306' - retry-time: 60? retries: 32, Error_code: 1130

```

2003錯(cuò)誤碼:

```

2017-09-21T08:25:51.605374Z 9 [ERROR] Slave I/O for channel '': error connecting to master 'slave_1@192.168.10.2:3306' - retry-time: 60? retries: 21, Error_code: 2003

```

1593錯(cuò)誤碼

```

[ERROR] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593

```

之后,對(duì)應(yīng)相應(yīng)的錯(cuò)誤碼就可以去google或者百度一下了狈癞。如果你也遇到跟我一樣的錯(cuò)誤茄靠,那么網(wǎng)上肯定已經(jīng)有相應(yīng)的解決方法,如果你還沒(méi)有找到的話蝶桶,可以通過(guò)qq找到我慨绳。

還有一種查看錯(cuò)誤信息的方式:

在從庫(kù)里,

```

mysql> show slave status\G;

```

可以看到下面這兩行信息:

```

mysql> show slave status\G

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

Slave_IO_State: Connecting to master

Master_Host: 192.168.1.107

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000045

Read_Master_Log_Pos: 107

Relay_Log_File: CENTOS6-relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin.000045

Slave_IO_Running: Connecting

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: 107

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: NULL

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 1045

Last_IO_Error: error connecting to master 'repl@192.168.1.107:3306' - retry-time: 60? retries: 86400

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 0

row in set (0.00 sec)

```

```

Last_IO_Errno: 1045

Last_IO_Error:error connecting to master 'repl@192.168.1.107:3306' - retry-time: 60? retries: 86400

```

就可以看到了錯(cuò)誤碼是1045了真竖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脐雪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子恢共,更是在濱河造成了極大的恐慌战秋,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讨韭,死亡現(xiàn)場(chǎng)離奇詭異脂信,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)透硝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門狰闪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蹬铺,你說(shuō)我怎么就攤上這事尝哆。” “怎么了甜攀?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵秋泄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我规阀,道長(zhǎng)恒序,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任谁撼,我火速辦了婚禮歧胁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厉碟。我一直安慰自己喊巍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布箍鼓。 她就那樣靜靜地躺著崭参,像睡著了一般。 火紅的嫁衣襯著肌膚如雪款咖。 梳的紋絲不亂的頭發(fā)上何暮,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天奄喂,我揣著相機(jī)與錄音,去河邊找鬼海洼。 笑死跨新,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坏逢。 我是一名探鬼主播域帐,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼是整!你這毒婦竟也來(lái)了俯树?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贰盗,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后阳欲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舵盈,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年球化,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秽晚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筒愚,死狀恐怖赴蝇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巢掺,我是刑警寧澤句伶,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站陆淀,受9級(jí)特大地震影響考余,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜轧苫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一楚堤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧含懊,春花似錦身冬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至重罪,卻和暖如春樱哼,著一層夾襖步出監(jiān)牢的瞬間哀九,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工搅幅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阅束,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓茄唐,卻偏偏與公主長(zhǎng)得像息裸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沪编,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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