日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

MySql主從復(fù)制(Master-Slave)

系統(tǒng) 2921 0

參考此篇成功完成 配置

?

MySql主從復(fù)制(Master-Slave) - 曹振華 - 博客園

MySql主從復(fù)制(Master-Slave)

MySql主從復(fù)制(Master-Slave)

1.主(master)服務(wù)器把數(shù)據(jù)更改的記錄或者事件記錄到二進制日志里。
2.從(slave)服務(wù)器把主服務(wù)器的二進制日志復(fù)制到自己的中繼日志里。
3.從(slave)服務(wù)器根據(jù)中繼日志的內(nèi)容應(yīng)用到自己的數(shù)據(jù)上。

假設(shè)我們的主從復(fù)制結(jié)構(gòu)是由3臺服務(wù)器構(gòu)成,1臺master,2臺slave。

文章中的命令行提示符的含義:

1
2
3
[root@m /s/s ~] #? 表示要在master slave slave三臺服務(wù)器里都要執(zhí)行的命令
[root@master ~] # 表示只在master服務(wù)器里執(zhí)行的命令
[root@s /s ~] #??? 表示要在2臺slave服務(wù)器里都要執(zhí)行的命令

第一步,分別在3臺機器上安裝MySql,并使用MySql自帶的my-medium.cnf作為初始配置文件,在3臺服務(wù)器里分別執(zhí)行如下命令。

1
2
[root@m /s/s ~] # yum -y install mysql mysql-server
[root@m /s/s ~] # \cp -f /usr/share/doc/mysql-server-*/my-medium.cnf /etc/my.cnf

第二步,創(chuàng)建用于復(fù)制的賬戶,我們不管主從,在3臺MySql創(chuàng)建相同用戶名密碼的用戶。
1.首先啟動MySql,并設(shè)置root密碼,我這里是測試,所以你千萬別把密碼設(shè)置的這么簡單。

1
2
[root@m /s/s ~] # /etc/init.d/mysqld start
[root@m /s/s ~] # /usr/bin/mysqladmin -u root password 'masterpass'

?

2.創(chuàng)建并授權(quán)用于從服務(wù)器復(fù)制的復(fù)制賬戶。

1
2
3
4
5
[root@m /s/s ~] # mysql -uroot -p
Enter password:
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser' @'192.168.
0.% ' IDENTIFIED BY ' replpass';
Query OK, 0 rows affected (0.00 sec)

★:如果你了解MySql,可能你會說只需要在主服務(wù)器上添加一個從服務(wù)器用于復(fù)制的賬戶即可,也不需要REPLICATION SLAVE權(quán)限,但是我這樣做的好處有2個方面,1是監(jiān)視和管理復(fù)制,2是方便將來主從交換角色。

第三步,配置主(Master)服務(wù)器配置文件,此步在主(Master)里操作。
在/etc/my.cnf的[mysqld]域后追加

1
2
3
4
5
server_id?????????? = 100
log_bin???????????? = mysql-bin
log_bin_index?????? = mysql-bin.index
sync_binlog???????? = 1
max_binlog_size???? = 200M

?

?

1
2
3
4
5
server_id??????? 服務(wù)器ID,不要和別的服務(wù)器沖突了,在同一個局域網(wǎng)里,我習(xí)慣使用ip的最后一位
log_bin????????? 顯式的指定二進制日志的文件名
log_bin_index??? 注意這里指定的文件名不是記錄的表的索引,而是記錄了二進制日志的文件名
sync_binlog????? 設(shè)為1就是把MySql每次發(fā)生的修改和事件的日志即時同步到硬盤上
max_binlog_size? 指定二進制日志的大小

添加完設(shè)置后,重啟MySql,并確認(rèn)主服務(wù)器狀態(tài)。

1
2
3
4
5
6
7
8
9
10
[root@master ~] # /etc/init.d/mysqld restart
[root@master ~] # mysql -uroot -p
Enter password:
mysql> show master status;
+------------------+----------+--------------+------------------+
| File???????????? | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |?????? 98 |????????????? |????????????????? |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

?

可見,二進制日志已經(jīng)開啟并生效了,接下來該配置從(Slave)服務(wù)器了。

第三步,配置2臺從(Slave)服務(wù)器配置文件,此步分別在2臺從(Slave)里操作。
1.在192.168.0.101的/etc/my.cnf的[mysqld]域后追加

1
2
3
4
5
6
7
8
9
10
server_id?????????? = 101
log_bin???????????? = mysql-bin
log_bin_index?????? = mysql-bin.index
log_slave_updates?? = 1
relay_log?????????? = mysql-relay-bin
relay_log_index???? = mysql-relay-bin.index
max_binlog_size???? = 200M
read_only?????????? = 1
slave-skip-errors?? = 1062,1053
skip_slave_start??? = 1

?

2.在192.168.0.102的/etc/my.cnf的[mysqld]域后追加

1
2
3
4
5
6
7
8
9
10
server_id?????????? = 102
log_bin???????????? = mysql-bin
log_bin_index?????? = mysql-bin.index
log_slave_updates?? = 1
relay_log?????????? = mysql-relay-bin
relay_log_index???? = mysql-relay-bin.index
max_binlog_size???? = 200M
read_only?????????? = 1
slave-skip-errors?? = 1062,1053
skip_slave_start??? = 1

?

前面解釋的參數(shù),這里就不解釋了。

1
2
3
4
5
log_slave_updates??? 讓從服務(wù)器把自身復(fù)制的事件和記錄都寫到自己的二進制日志里
relay_log??????????? 中繼日志
read_only??????????? 讓從服務(wù)器只讀,可以防止有人誤從服務(wù)器插入數(shù)據(jù),導(dǎo)致主從數(shù)據(jù)不一致。
slave-skip-errors??? 在復(fù)制過程中忽略一些錯誤,讓復(fù)制繼續(xù)進行,在這里我忽略了1062和1053號錯誤,如果要忽略所有錯誤就設(shè)成all
skip_slave_start???? 防止從服務(wù)器在崩潰后自動開啟,以給你足夠的時間修復(fù)。

另外,你可能發(fā)現(xiàn)我把主(Master)服務(wù)器里的一些配置,比如二進制日志的設(shè)置也拿過來了,同樣是方便將來不停服務(wù)實現(xiàn)主從交換角色。

★:有人肯定要疑問了,為什么在從(Slave)服務(wù)器的配置里沒有從主服務(wù)器復(fù)制的賬戶等相關(guān)信息?
回答:直接把這些的信息寫到配置文件是沒有好處的,根據(jù)一些高手的經(jīng)驗,還可以能出不可以預(yù)知的錯誤,因此我們將在下一步啟動復(fù)制的時候,
在MySql命令行里執(zhí)行命令來指定這些信息,這樣做還有一個很大的好處,在我們要變換主服務(wù)器的時候不需要重啟MySql。
★:關(guān)于過濾復(fù)制對象的問題,但是如果不是特殊需要,不要使用復(fù)制過濾,因為同樣有幾率在一些事件觸發(fā)的時候?qū)е乱恍╁e誤。介紹幾種過濾參數(shù)。
binlog_do_db 只復(fù)制指定的數(shù)據(jù)庫(主服務(wù)器配置文件里設(shè)置)
binlog_ignore_db 不復(fù)制指定的數(shù)據(jù)庫(主服務(wù)器配置文件里設(shè)置)
replicate_ignore_table 不復(fù)制指定的表(從服務(wù)器配置文件里設(shè)置)
replicate_wild_ignore_table 使用wild匹配來不復(fù)制的指定表(從服務(wù)器配置文件里設(shè)置),比如參數(shù)設(shè)為abc.%,表示不復(fù)制abc的所有表。

3.在2臺從(Slave)服務(wù)器里重啟MySql服務(wù)器

1
[root@s /s ~] # /etc/init.d/mysqld restart

?

★:因為我們是新裝的MySql服務(wù)器,所以接下來我們就可以開啟復(fù)制了,如果你是給已經(jīng)有大量數(shù)據(jù)的MySql服務(wù)器添加從(Slave)服務(wù)器,那么先從主(Master)服務(wù)器把數(shù)據(jù)導(dǎo)入到從(Slave)服務(wù)器里,讓2者的數(shù)據(jù)一致,然后再開啟復(fù)制。最簡單的方法就是關(guān)閉主服務(wù)器MySql的寫入,用mysqldump工具導(dǎo)出所有主(Master)服務(wù)器數(shù)據(jù)并上傳到從(Slave)服務(wù)器:

1
2
3
4
[root@master ~] # mysqldump -u root -p --all-databases > /tmp/dbbackup.sql
[root@master ~] # scp /tmp/dbbackup.sql user@192.168.0.101:/tmp/dbbackup.sql
[root@master ~] # scp /tmp/dbbackup.sql user@192.168.0.102:/tmp/dbbackup.sql
[root@master ~] # rm -f /tmp/dbbackup.sql

然后把備份導(dǎo)入到從(Slave)服務(wù)器里:

1
2
[root@s /s ~] # mysql -u root -p < /tmp/dbbackup.sql
[root@s /s ~] # rm -f /tmp/dbbackup.sql

如果你要在主服務(wù)器MySql正常運行的狀態(tài)下進行熱拷貝等方法,我建議你不要用mysqldump這個命令,如果是MyISAM存儲引擎,用mysqlhotcopy進行熱備份會更好,如果是InnoDB存儲引擎,使用ibbacup這樣的工具更好。

第四步,在從(Slave)服務(wù)器里開啟復(fù)制,次步的操作在2臺從(Slave)服務(wù)器里執(zhí)行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@s /s ~] # mysql -uroot -p
Enter password:
mysql> CHANGE MASTER TO MASTER_HOST= '192.168.0.100' ,
???? -> MASTER_PORT=3306,
???? -> MASTER_USER= 'repluser' ,
???? -> MASTER_PASSWORD= 'replpass' ,
???? -> MASTER_LOG_FILE= 'mysql-bin.000001' ,
???? -> MASTER_LOG_POS=0;
Query OK, 0 rows affected (0.20 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
????????????? Slave_IO_State: Waiting for master to send event
???????????????? Master_Host: 192.168.0.100
???????????????? Master_User: repluser
???????????????? Master_Port: 3306
???????????? ............
??????????? Slave_IO_Running: Yes
?????????? Slave_SQL_Running: Yes
???????????? ............
1 row in set (0.00 sec)

最后我用了SHOW SLAVE STATUS來查看復(fù)制情況,從第一行可以看出從服務(wù)器已經(jīng)在等待主服務(wù)器的event了,也可以看到Slave_IO,Slave_SQL線程都正常開啟,最好同時查看從(Slave)服務(wù)器的日志/var/log/mysqld.log,確認(rèn)沒有錯誤信息,接下來你就可以去主服務(wù)器進行一些操作看看同步是否正常。

另外,在上面的操作中MASTER_LOG_POS=0,這里0的意思是從日志開頭開始復(fù)制的意思,并不是實際的日志里的位置,實際的日志里的開始位置默認(rèn)應(yīng)該是4。
★:有人覺得,數(shù)據(jù)分別保存在2個機器里,就認(rèn)為備份不需要了,千萬別這么想,只能說有助于備份,絕對不能替代備份。

到此為止,簡單的主從配置就完了,但是真正要使用和管理好主從MySql服務(wù)器,不是靠這點知識就可以的。

http://www.litvip.com/2011/06/01/291

網(wǎng)站計數(shù)器

MySql主從復(fù)制(Master-Slave)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 衡山县| 深水埗区| 无极县| 巴楚县| 丰城市| 富锦市| 中阳县| 正宁县| 于田县| 佳木斯市| 巴中市| 彰化市| 观塘区| 茌平县| 清丰县| 蒙阴县| 阳高县| 格尔木市| 紫阳县| 嘉鱼县| 鸡泽县| 乐安县| 鄂伦春自治旗| 全州县| 灵石县| 贵溪市| 大竹县| 左云县| 古田县| 堆龙德庆县| 黔东| 尚义县| 太原市| 都昌县| 鄂尔多斯市| 万载县| 宝山区| 泰来县| 莱州市| 沙田区| 临澧县|