CentOS6.5配置MySQL主從同步


原文地址:http://www.cnblogs.com/zhongshengzhen/
 
修改主MySQL的配置
[root@localhost etc] vi /etc/my.cnf
添加以下配置
server-id=1
log-bin=mysql-bin #這個一定得設置,否則沒有日志的話,從數據庫上會報錯
 
 
[root@localhost etc]# service mysqld stop
Stopping mysqld:  [  OK  ]
[root@localhost etc]# service mysqld start
Starting mysqld:  [  OK  ]
[root@localhost etc]# service mysqld status
mysqld (pid  3129) is running...
 
 
創建主從復制的帳號:
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@'192.168.137.197' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
如果該命令無法執行,請檢查是否用了圓角的’,需要用半角的',再不行,那就是mysql數據庫安裝不成功。
 
192.168.137.197是從庫的地址
backup是需要同步的用戶名(有些博客說是數據庫名稱,坑人不倦)
123456為遠程同步密碼
 
解鎖表
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
正確的狀態如下:
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      106 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
 
配置錯誤的情況,解決辦法見文章最后的疑難解答。
mysql> SHOW MASTER STATUS;
Empty set (0.00 sec)
 
 
修改從庫配置:
[root@localhost ~]# vi /etc/my.cnf
添加語句
log-bin = mysql-bin
server_id = 2
master-host = 192.168.137.33
master-user = backup
master-pass = 123456
master-port = 3306
master-connect-retry = 60
 
mysql> CHANGE MASTER TO
     MASTER_HOST='192.168.137.33',
     MASTER_USER='backup',
     MASTER_PASSWORD='123456',
     MASTER_PORT=3306,
     MASTER_LOG_FILE='mysql-bin.000001',
     MASTER_LOG_POS=106,
     MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected (0.02 sec)
測試主從是否配置成功。
mysql> show slave status\G;
 
 
數據庫測試:
(1)主從都新建了test數據庫和test數據表:
 
CREATE TABLE `test` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NAME` varchar(255) DEFAULT NULL,
  `UPDATE_TIME` datetime DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
(2)往主庫插入數據行:
 
INSERT into test(name,update_time) value ('helo','2015-10-27 19:09:00');
 
恭喜,你會發現數據已經得到同步。
 
總結:
主從復制完成,但是還不能滿足我們的需求。這種配置方式只是將主庫的數據同步到從庫。
我們設想下:有一天我們往從庫插入或者刪除數據,那么主庫的數據不會得到改變。就會造成數據不一致。
下一章將配置主從數據互為同步。
 
 
 
疑難解答:
1、
mysql> SHOW MASTER STATUS;
Empty set (0.00 sec)
 
主庫出現上面的提示說明my.cnf配置 不正確
正常的應該是如下:
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      106 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
原因是:沒有啟動 log-bin日志生成項
處理辦法:
在/etc/my.conf的第一項填上log-bin=mysql-bin,如下:
[mysqld]
log-bin=mysql-bin
......
網絡上很多垃圾教程都TM把這項不是寫到第一行,造成了無法產生日志。這些沒有實踐抄別人BLOG的人都TM是一群豬。
 
2、此外,執行:
mysql> show slave status\G;
如果出現這樣子的錯誤:
Slave_IO_Running: No
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Misconfigured master - server id was not set'
或者:
Slave_IO_Running: No
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
正確的應該是:
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
 
你會疑惑,不是已經設置了server-id了嗎?
如果在網上有人告訴你使用指令:mysql> set global sql_slave_skip_counter=1;
你可以直接問候他全家。
造成該錯誤的原因是:server-id沒有列在 [mysqld]下面
正確的my.cnf如下:
[mysqld]
log-bin = mysql-bin
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
server_id = 2
master-host = 192.168.137.33
master-user = backup
master-pass = 123456
master-port = 3306
master-connect-retry = 60

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM