Mysql 5.5 主從數據複製(Master-Slave Replication)配置筆記

這裏講的是Master-Slave的主從複製方式(單向複製),如果需要Master-Master模式,反過來再配置一遍就可以了。

Server的OS是CentOS6.3。


主從複製(Master-Slave Replication)配置步驟:

1. 在Master和Slave上都安裝Mysql server

兩個mysql server的配置文件/etc/my.cnf內容改爲如下,不同之處是server-id不一樣,一個是1,一個是2。

其中binlog-do-db是需要複製數據的database名字,可以配置多個(寫在多行)。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#add for performance tuning
max_connections = 1500
expire_logs_days =2
max_connect_errors =100


binlog_format=mixed
log-bin=mysql_bin
server-id=1
binlog-do-db=dbname
binlog-do-db=dbname2
binlog-ignore-db=test
binlog-ignore-db=mysql


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


2. 爲兩個Mysql建立相同的database和table,添加用戶和權限。

create database dbname;

grant all privileges on dbname.* to `user`@`%` identified by 'pass';

grant all privileges on dbname.* to `user`@`localhost` identified by 'pass';

flush privileges;

如果是已存在的Master數據庫,table以及數據已經存在,則需要進行數據遷移,有兩種方式遷移。

2.1 用mysqldump進行數據遷移

[master-mysql] 

mysqldump -uuser -ppass -A -R dbname > masterbackup.sql

[slave-mysql] 

mysql -uuser -ppass dbname < masterbackup.sql

2.2 複製數據文件進行數據遷移

例如centos默認mysql的數據目錄是/var/lib/mysql

則只需要將master mysql上面的數據目錄打包,覆蓋slave mysql的數據目錄,重啓slave,就完成了數據遷移。

3. 建立數據複製

[master-mysql] 

grant replication slave on *.* to `repluser`@`slave_ip` identified by 'pass' ;

運行以上命令,建立一個專門用於複製數據的用戶。
show master status;

運行以上mysql命令,得到master mysql當前的數據文件和數據bin-log位置。

得到的結果應該如下:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      127 |              |                  |
+------------------+----------+--------------+------------------+

[slave-mysql]

change master to master_host='master_ip',master_user='repluser',master_password='pass', master_log_file='mysql-bin.000001',master_log_pos=127; 
start slave;
運行以上命令將slave連接到master上,啓動slave數據複製。

show slave status\G;

運行以上命令查看slave狀態,結果如果出現:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

則表示沒有問題,數據複製已經生效。

4. 常見問題與解決方法

4.1 如果配置都沒有問題,但是運行start slave出錯,那麼執行以下步驟:

重啓master數據庫,重新分配複製用戶權限。重新運行第3步的操作。在slave數據庫上執行:

stop slave; reset slave; start slave;

4.2 如果執行show slave status\G; 發現結果中有error,說明覆制遇到了問題,若認爲問題可以忽略,則執行:
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=100; START SLAVE;

這樣可以忽略100個錯誤,視當前遇到的錯誤個數決定。

4.3 如果調用mysql的應用程序出現下面的錯誤:

Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED

則說明覆制使用的事務等級有問題,不符合應用程序的需求,解決方法是:

在配置文件/etc/my.cnf中配置 BINLOG_FORMAT=MIXED

發佈了39 篇原創文章 · 獲贊 18 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章