兩臺安裝好的MySQL 5.5的數據庫。以Master與Slave區分
Master:
IP地址(172.16.1.210):python
[root@Qinglin-A /]# ifconfig eth0 eth1 Link encap:Ethernet HWaddr 00:0C:29:B4:0A:5D inet addr:192.168.1.210 Bcast:172.16.1.255 Mask:255.255.255.0
MySQL版本:mysql
[root@Qinglin-A /]# mysql -V mysql Ver 14.14 Distrib 5.5.32, for Linux (x86_64) using readline 5.1
Slave:
IP地址(172.16.1.220):sql
[root@Qinglin-B /]# ifconfig eth0 eth1 Link encap:Ethernet HWaddr 00:0C:29:0E:20:1D inet addr:192.168.1.220 Bcast:172.16.1.255 Mask:255.255.255.0
MySQL版本:數據庫
[root@Qinglin-B /]# mysql -V mysql Ver 14.14 Distrib 5.5.32, for Linux (x86_64) using readline 5.1
MySQL 主從同步都是異步的複製方式,即不是嚴格實時同步的數據同步。
實戰前必須知道的知識
a. 主從複製是異步的,邏輯的SQL語句級的複製。
b. 同步時,主庫有一個IO線程,從庫有兩個線程,IO和SQL線程。
c. 實現主從複製的必要條件,主庫要開啓binlog功能。
一、Master開啓binlog,並設置server-id
注:server id 是避免不一樣機器或實列ID重複,選擇0<server-idvim
[root@Qinglin-A /]# vim /etc/my.cnf server-id = 1 log-bin=mysql-bin [root@Qinglin-A /]# egrep "log-bin|server-id" /etc/my.cnf server-id = 1 log-bin=mysql-bin
二、Slave設置server-id
注:Slave的binlog是不開啓的,若是開啓那就是雙主同步,性能很通常。session
[root@Qinglin-B /]# vim /etc/my.cnf server-id = 3 [root@Qinglin-B /]# egrep "log-bin|server-id" /etc/my.cnf server-id = 3 #log-bin=mysql-bin
三、Master和Slave同步重啓mysqlapp
[root@Qinglin-A /]# /etc/init.d/mysql restart Shutting down MySQL. SUCCESS! Starting MySQL.. SUCCESS! [root@Qinglin-B /]# /etc/init.d/mysql restart Shutting down MySQL. SUCCESS! Starting MySQL.. SUCCESS!
四、Master效驗bin-log與server-id
注:slave只須要查看server-id就能夠異步
mysql> show variables like "log_bin"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.00 sec) mysql> show variables like "server_id"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 1 | +---------------+-------+ 1 row in set (0.00 sec)
五、master建立並受權網段訪問的從庫個賬戶,使slave能夠訪問master
下列爲建立Slave用戶,刷新權限,並查看用戶權限。ide
mysql> grant replication slave on *.* to 'rep'@'192.168.1.%' identified by'123456'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> show grants for rep@'192.168.1.%'; +--------------------------------------------------------------------------------------------------------------------------+ | Grants for rep@192.168.1.% | +--------------------------------------------------------------------------------------------------------------------------+ | GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.1.%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' | +--------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
六、記錄Master的binlog位置與點,請切記下列標黃處,後期會用到。性能
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 332 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
七、鎖表備份Master的全部數據庫
-A 備份所有數據庫
-B 導出幾個數據庫
-F –flush-logs 開始導出以前刷新日誌 注意:假如一次導出多個數據庫(使用選項–databases或者–all-databases),將會逐個數據庫刷新日誌
-x 鎖表,保證數據的一致性
–events 導出事件
–master-data=2 若是=2就生成就是註釋,不執行。
[root@Qinglin-A /]# mysqldump -uroot -p'123456' --events -A -B -F --master-data=2 -x |gzip >/home/bak_`date +%F`.sql.gz [root@Qinglin-A /]# ll /home/bak_2016-08-02.sql.gz -rw-r--r-- 1 root root 144365 Aug 2 15:16 /home/bak_2016-08-02.sql.gz
八、slave恢復數據庫,由於我加大B參數,因此不須要指定庫恢復
注:從master的備份文件到slave能夠考慮用scp傳到slave中,這裏不作演示。
[root@Qinglin-B guanqinglin]# gzip -d bak_2016-08-02.sql.gz [root@Qinglin-B guanqinglin]# ls bak_2016-08-02.sql [root@Qinglin-B guanqinglin]# mysql -uroot -p123456
九、導入slave的master信息(slave操做)
操做前,請使用以下方法測試一下,用戶和遠程登錄是否OK,執行以下命令,登陸到那mysq>界面爲成功。
[root@Qinglin-B /]# mysql -h 192.168.1.210 -urep -p123456 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.5.32-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>
退出上面執行的mysql 界面,從新使用root登陸Slaver的mysql界面執行導入Master信息操做。
[root@Qinglin-B /]# mysql -uroot -p123456 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.5.32 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> CHANGE MASTER TO -> MASTER_HOST='192.168.1.210', -> MASTER_PORT=3306, -> MASTER_USER='rep', -> MASTER_PASSWORD='123456', -> MASTER_LOG_FILE='mysql-bin.000001', -> MASTER_LOG_POS=332; Query OK, 0 rows affected (0.12 sec)
十、slave查看master info信息
[root@Qinglin-B /]# cat /application/mysql/data/master.info 18 mysql-bin.000001 332 192.168.1.210 rep 123456 3306 60 0 0 1800.000 0
十一、slave開啓slave開啓
[root@Qinglin-B /]# mysql -uroot -p123456 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.5.32 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> start slave; Query OK, 0 rows affected (0.01 sec)
十二、檢查,有兩個標黃的OK,則是正常啓動(Seconds_Behind_Master 0 是落後主庫的秒數,0是正確)
mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.210 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 107 Relay_Log_File: Qinglin-B-relay-bin.000004 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000002 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: 107 Relay_Log_Space: 456 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: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 1 row in set (0.00 sec)
一、Master建立一個數據庫
mysql> create database qinglin; Query OK, 1 row affected (0.09 sec)
二、slave 查看從庫relay文件中是否存在主庫建立的create數據庫qinglin
注:下列是截取的內容
[root@Qinglin-B data]# mysqlbinlog Qinglin-B-relay-bin.000004 SET @@session.collation_database=DEFAULT/*!*/; create database qinglin /*!*/; DELIMITER ;
三、檢查salve是否已經建立了一個數據庫
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | qinglin | +--------------------+ 4 rows in set (0.00 sec)