主頁 > 數據庫技術 > MySQL主從同步機制及同步中的問題處理

MySQL主從同步機制及同步中的問題處理

PDF版本

大型網站架構中,MySQL主從配置是必不可少的,尤其對于Drupal這樣數據庫訪問頻繁的框架極為重要。基本的MySQL主從配置大家都比較熟悉,但是在主從配置的結構中,由于多種原因,主從配置經常出現無法同步,以及MySQL由于主從配置的原因而崩潰或者Down機,這里就本人的經驗做一些簡單介紹。


MySQL主從配置的搭建
具體步驟:
1. 安裝MySQL。首先要在兩臺服務器上安裝MySQL,完成之后應該確認能否兩臺服務器能否互相訪問。 這是因為缺省的my.cnf設置有
bind-address = 127.0.0.1,這條語句應該被注釋掉。
2. 創建賬號。數據庫中缺省的帳戶的host值是localhost,所以應該創建一個可以遠端訪問的帳號。比如:[email protected]’%’ or [email protected]
3. 配置主Server。
在主服務器(數據庫源)上的my.cnf配置[mysqld]之后加入如下條目:

log_bin = /var/log/mysql/mysql-bin.log
server-id = 1 //1代表主數據庫(源) 2代表輔數據庫(目的)
binlog_do_db = testmirror //要做同步的數據庫名字,可以是多個數據庫,之間用分號分割。

4. 配置從Server。
在輔服務器上的my.cnf中加入如下內容

server-id = 2 //2代表輔
master-host = xx.xx.xx.xx //主服務器的IP地址
master-user = //主服務器的用戶名
master-password = //數據庫密碼
master-port = 3306
master-connect-retry = 10 //每個10秒鐘同步一次
replicate-do-db = testmirror //需要同步的庫名字

5. 賬號權限設置。
輔服務器將使用主服務器上的[email protected]%帳戶登陸主服務器與其發生通信,除了這個賬戶應該在主上真實存在,
這個賬戶應該有兩個屬性:REPLICATION SLAVE 和 READ。

GRANT REPLICATION SLAVE ON *.* TO [email protected]'%' IDENTIFIED BY 'password';

6.主服務器上運新mysql命令

mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000015 | 106 | testmirror | ? ?|
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

記住這些參數。

7. 在輔服務器上運新如下命令

mysql> show slave status;
----------------------------------------------------------------------------------------------------------+
Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos |
Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB |
Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table |
Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space |
Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed| Master_SSL_CA_File | Master_SSL_CA_Path |
Master_SSL_Cert |Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | Master_SSL_Verify_Server_Cert |
Last_IO_Errno | Last_IO_Error | Last_SQL_Errno | Last_SQL_Error |
---------------------------------------------------------------------------------------------------------+
| Waiting for master to send event | xx.xx.xx.xx | root | 3306 | 10 | mysql-bin.000015 | 384 | ubuntudev-relay-bin.000002 | 529 |
mysql-bin.000015 |Yes | Yes | testmirror | | | | | | 0 | | 0 | 384 | 688 | None | | 0 | No | | | | | | 0 | No | 0 | | 0 | |
--------------------------------------------------------------------------------------------------------+
mysql> show processlist;
+-----+-------------+-----------+------+---------+------+---------------------------------------------+
| Id | User | Host | db | Command | Time | State |Info
+-----+-------------+-----------+------+---------+------+----------------------------------------------+
| 405 | root | localhost | NULL | Query | 0 | NULL |show processlist |
| 423 | system user | | NULL | Connect | 332 | Waiting for master to send event | NULL
| 424 | system user | | NULL | Connect | 72 | Has read all relay log; waiting for the slave I/O thread to update it | NULL
+-----+-------------+-----------+------+---------+------+--------------------------------------------------+

3 rows in set (0.00 sec)

重要的是查看 Slave_IO_Running | Slave_SQL_Running兩個值,必須都是YES才可以, 但是通常不是YES。

MySQL主從不同步問題解決

1.首先停掉Slave服務:

mysql> slave stop

2.到主服務器上查看主機狀態:
記錄File和Position對應的值。

mysql> show master status;
+------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql-bin.000020 | 135617781 | | |
+------------------+-----------+--------------+------------------+
1 row in set (0.00 sec)

3.到slave服務器上執行手動同步:

mysql> change master to
> master_host='master_ip',
> master_user='user',
> master_password='pwd',
> master_port=3307,
> master_log_file='mysql-bin.000020',
> master_log_pos=135617781;
1 row in set (0.00 sec)
mysql> slave start;
1 row in set (0.00 sec)

再次查看slave狀態發現:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Seconds_Behind_Master: 0

我們知道,因為DATA REPLICATION機制完全是基于在主上執行的增量SQL要被傳播到輔服務器上,并且被成功運行。這就勢必要求:在運行此機制前,主輔數據庫中數據是一致的;以及在運行此機制中,輔數據庫禁止來自其他的SQL(非主上傳播過來SQL)的寫操作。但是在運行中仍然可能遇到不一致的產生,這會導致通信無法正常繼續下去。因此一旦主從出現問題,首先應該解決同步位置的問題,修復丟失的數據。

MySQL主從配置的其他相關問題,后續文章中陸續跟大家再談。


聲明: 本站所有文章歡迎轉載,所有文章未說明,均屬于原創,轉載均請注明出處。
本文有效鏈接: http://www.vczhtn.live/2012/03/mysql-master-slave-troubles/
版權所有: Drupal與高性能網站架構 http://www.vczhtn.live


, , ,

評論:2

發表評論
  1. avatar
    回復 waveer
    13/09/28

    你好,想問下,虛擬主機可以做數據庫同步嗎?

    • avatar
      回復 nathan
      14/03/27

      不好意思回復的晚點,在虛擬機里應該也是可以實現的,沒問題,不知道你現在是否配置成功。

發表評論

電子郵件地址不會被公開。 必填項已用 * 標注


8 − 四 =

您可以使用這些 HTML 標簽和屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

引用:1

下面所列的是引用到本博客的鏈接
MySQL主從同步機制及同步中的問題處理 來自 Drupal與高性能網站架構
pingback 來自 mysql主從服務器同步 - 認不倒你的博客認不倒你的博客 2015 年 5 月 23 日

[…] 本文參考: 朱立冬的文章‘MySQL主從同步機制及同步中的問題處理’ […]

頂部
安徽福彩15选5走势图