1.文檔編寫目的mysql
MySQL數據庫自身提供的主從複製功能能夠方便的實現數據的多處自動備份,實現數據庫的擴展。多個數據備份不只能夠增強數據的安全性,經過實現讀寫分離還能進一步提高數據庫的負載性能。本文檔講述如何實現MySQL主從複製。注:本文檔實現的MySQL主備模式爲Active-Passive而不是Active-Active,若是使用雙活的方式,建議企業內部配備MySQL的DBA來維護MySQL。CDH集羣在運行過程當中,MySQL的負載並不會過高,推薦的方式是Active-Passive模式,以下降維護成本和維護難度。sql
1.Master和Slave配置數據庫
2.構建主從複製vim
3.主從複製驗證安全
1.兩臺Linux服務器(172.31.10.118(主)/172.31.5.190),操做系統爲CentOS6.5服務器
2.MySQL5.1.73socket
3.採用root用戶操做oop
1.兩個MySQL版本必須一致性能
2.兩個MySQL已安裝好,且沒有任何數據測試
3.主MySQL必須開啓bin-log日誌
2.MySQL主從複製
2.1Master和Slave配置
配置文件說明:
log-bin:開啓二進制日誌,日誌文件前綴
server-id:數據庫服務的惟一標識確保標識不重複,通常設置爲服務器ip的末尾數
binlog-format:設置Mysql binlog記錄日誌的格式(格式含:Statement、MIXED、ROW),MySQL默認使用的是Statement,推薦使用MIXED。
修改/etc/my.conf文件,增長以下配置
[root@ip-172-31-10-118 cloudera-scm-server]# vim /etc/my.cnf [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 log-bin=mysql-bin server-id=118 binlog_format=MIXED [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
修改/etc/my.conf文件,增長以下配置
[root@ip-172-31-5-190 ~]# vim /etc/my.cnf [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 log-bin=mysql-bin server-id=190 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
[root@ip-172-31-5-190 ~]# service mysqld restart Stopping mysqld: [ OK ] Starting mysqld: [ OK ] [root@ip-172-31-5-190 ~]#
2.1構建主從複製
用戶名:mysync 密碼:mysync
GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'172.31.%' IDENTIFIED BY 'mysync'; FLUSH PRIVILEGES;
mysync用戶必須具備REPLICATION SLAVE權限。說明一下172.31.%,這個配置是指明mysync用戶所在服務器,這裏%是通配符,表示IP以172.31開頭的Server均可以使用mysync用戶登錄Master主服務器。也能夠指定固定IP。
命令行操做
[root@ip-172-31-10-118 ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 5.1.73-log Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'172.31.%' IDENTIFIED BY 'mysync'; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
2.查看Master(172.31.10.118) MySQL二進制日誌File與Position
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 1121 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) mysql>
3.在Slave從MySQL上執行以下SQL
change master to master_host='172.31.10.118', master_user='mysync', master_password='mysync', master_log_file='mysql-bin.000003', master_log_pos=1121;
命令行執行
[root@ip-172-31-5-190 ~]# mysql -uroot -p ... Server version: 5.1.73-log Source distribution ... mysql> change master to -> master_host='172.31.10.118', -> master_user='mysync', -> master_password='mysync', -> master_log_file='mysql-bin.000003', -> master_log_pos=1121; Query OK, 0 rows affected (0.02 sec) mysql>
4.在Slave從MySQL上執行命令,啓動同步
mysql> start slave; Query OK, 0 rows affected (0.00 sec) mysql>
5.在Slave MySQL上查看Slave狀態
mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.31.10.118 Master_User: mysync Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 1121 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.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: 1121 Relay_Log_Space: 407 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 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: 1 row in set (0.00 sec) mysql>
注意:上圖標註部分顯示爲「Yes」則表示主從複製構建成功。
2.3主從複製驗證
2.登陸Slave從MySQL上執行SQL
3.在Master主MySQL上執行SQL
mysql> create database test; Query OK, 1 row affected (0.00 sec) mysql> use test; Database changed mysql> create table table1(id int, name varchar(32)); Query OK, 0 rows affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec) mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | table1 | +----------------+ 1 row in set (0.00 sec) mysql>
4.在Slave從MySQL上執行SQL查看
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec) mysql> use test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | table1 | +----------------+ 1 row in set (0.00 sec) mysql>
經過上述測試,Master主MySQL建立的庫和表都正常的同步到Slave從MySQL。
3.備註
mysql> stop slave; Query OK, 0 rows affected (0.00 sec) mysql> reset slave; Query OK, 0 rows affected (0.00 sec) mysql>
注意:執行上述操做後,須要重啓MySQL服務。
參考文檔:http://blog.csdn.net/wlzx120/article/details/52301383
推薦關注Hadoop實操,第一時間,分享更多Hadoop乾貨,歡迎轉發和分享。