linux下配置mysql主從同步的步驟

linux下配置mysql主從同步的步驟

 

一、主機環境 

主機: 

master操作系統:rhel6.0

IP:172.16.0.100 

MySQL版本:5.1.47 

從機: www.aiwalls.com  

slave操作系統:rhel6.0

IP:172.16.0.200 

MySQL版本:5.1.47

二、創建數據庫 

分別登錄master機和slave機的mysql:mysql –u root –p 

創建數據庫:create database repl; 
 

三、master機和slave機的相關配置 

1、修改master機器中mysql配置文件my.cnf,該文件在/etc目錄下 

在[mysqld]配置段添加如下字段 

server-id=1 

log-bin=mysql-bin 

binlog-do-db=repl //需要同步的數據庫,如果沒有本行,即表示同步所有的數據庫 

binlog-ignore-db=mysql //被忽略的數據庫 

在master機上為slave機添加一同步帳號 

grant replication slave on *.* to 'replication'@'172.16.0.200' identified by '123456'; 

重啟master機的mysql服務:service mysqld restart 

用show master status 命令看日志情況 

mysql>show master status; 
 

+—————–+————+——————-+———————–+ 

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 

+—————–+————+——————-+———————–+ 

| log.000003 | 98 | repl | mysql | 

+—————–+————+——————-+———————–+ 

1 row in set (0.00 sec) 

2、修改slave機中mysql配置文件 

同樣在[mysqld]字段下添加如下內容 

server-id=2   www.aiwalls.com  

master-host=172.16.0.100 

master-user=repl 

master-password=123456 

master-port=3306 

master-connect-retry=60 

replicate-do-db=repl //同步的數據庫,不寫本行 表示 同步所有數據庫 

然後重啟slave機的mysql 
 

在slave機中進入mysql 

mysql>start slave; 

mysql>show slave status\G; 

如果Slave_IO_Running、Slave_SQL_Running狀態為Yes則表明設置成功。 

這時 再執行show slave status\G 

顯示如下: 

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

Slave_IO_State: Waiting for master to send event 

Master_Host: 192.168.1.222 

Master_User: repl 

Master_Port: 3306 

Connect_Retry: 60 

Master_Log_File: log.000003 

Read_Master_Log_Pos: 98 

Relay_Log_File: mysqld-relay-bin.000002 

Relay_Log_Pos: 229 

Relay_Master_Log_File: log.000003 

Slave_IO_Running: Yes 

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

Relay_Log_Space: 229 

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

1 row in set (0.00 sec) 

  www.aiwalls.com  

Slave_IO_Running: Yes   Slave_SQL_Running: Yes

信息中如上兩行都為Yes,說明配置成功。 
 

五、測試主從服務器是否能同步 

在主服務器上面新建一個表,必須在repl數據下 

mysql> use repl 

Database changed 

mysql> create table test(id int,name char(10)); 

Query OK, 0 rows affected (0.00 sec) 

mysql> insert into test values(1,'zaq'); 

Query OK, 1 row affected (0.00 sec) 

mysql> insert into test values(1,'xsw'); 

Query OK, 1 row affected (0.00 sec) 

mysql> select * from test; 

+——+——+ 

| id | name | 

+——-+——+ 

| 1 | zaq | 

| 1 | xsw | 

+——-+——+ 

2 rows in set (0.00 sec) 

在從服務器查看是否同步過來 

mysql> use repl; 

Database changed 

mysql> select * from test; 

+——+——+ 

| id | name | 

+——+——+ 

| 1 | zaq | 

| 1 | xsw | 

+——+——+ 

2 rows in set (0.00 sec) 

說明已經配置成功。 

 

四、出現的問題 

1. 當在執行start slave這條命令時,系統提示 

ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO, 

執行show slave status;又提示Empty set (0.00 sec)

原因:slave已經默認開啟,要先關閉再開啟 

執行 slave stop; 

再執行 

change master to master_host='172.16.0.200',master_user='repl',master_password='123456', master_log_file='log.000003' ,master_log_pos=98;

  2、出現錯誤提示  :Slave_IO_Running:NO

  mysql的error日志中信息:  www.aiwalls.com  

Slave I/O: error connecting to master 'replication@172.16.0.100:3306' – retry-time: 60  retries: 86400, Error_code: 1045
 

解決方法

1.在主mysql中創建slave遠程連接訪問時候的登錄密碼一定要設置對。

       2.停止slave上的mysqld服務,從服務器上刪除掉所有的二進制日志文件,包括一個數據目錄下的master.info文件和hostname-relay-bin開頭的文件,然後啟動slave上的mysqld服務。

master.info::記錄瞭Mysql主服務器上的日志文件和記錄位置、連接的密碼。

3.slave上Slave_SQL_Running: No ,提示某個表定義不正確

解決方法:

清空drop掉master和slave上的已經存在所有表,然後從master庫上導入新的數據即可。

 

 

作者 ygl23

發佈留言