1.3 複製如何工做mysql
總體上來講,複製有3個步驟:下圖描述了複製的過程:sql
負責在主、從服務器傳輸各類修改動做的媒介是主服務器的二進制變動日誌,這個日誌記載着須要傳輸給從服務器的各類修改動做。所以,主服務器必須激活二進制日誌功能。從服務器必須具有足以讓它鏈接主服務器並請求主服務器把二進制變動日誌傳輸給它的權限。數據庫
MariaDB [(none)]> CREATE USER 'tom'@'172.16.41.2' IDENTIFIED BY 'qazwsx123'; MariaDB [(none)]> REVOKE ALL PRIVILEGES ,GRANT OPTION FROM 'tom'@'172.16.41.2'; MariaDB [(none)]> GRANT RELOAD,LOCK TABLES, REPLICATION CLIENT ,REPLICATION SLAVE ON *.* TO 'tom'@'172.16.41.2'; MariaDB [(none)]> FLUSH PRIVILEGES服務器 |
(2)啓用二進制日誌
主配置文件/etc/my.cnf [mysqld]段中,修改以下行:ide
log-bin = /mydata/binlogs/master-bin |
server-id = 1 |
server-id = 2 |
#log-bin = /mydata/mysql-bin //加上註釋測試 relay-log = /mydata/relaylogs/relay-binspa |
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'relay_log'; +---------------+-----------------------------+ | Variable_name | Value | +---------------+-----------------------------+ | relay_log | /mydata/relaylogs/relay-bin | +---------------+-----------------------------+ 1 row in set (0.00 sec) |
(3)鏈接Master服務器
MariaDB [(none)]> CHANGE MASTER TO MASTER_USER='tom', MASTER_HOST='172.16.41.1', MASTER_PASSWORD='qazwsx123' ; MariaDB [(none)]> SHOW SLAVE STATUS\G; 在輸出的結果當中: Slave_IO_Running: No Slave_SQL_Running: No 代表slave尚未開始複製過程。日誌的位置爲4而不是0,這是由於0只是日誌文件的開始位置,並非日誌位置。實際上,MySQL知道的第一個事件的位置是4。 |
(4)在Slave上面啓動複製線程:
MariaDB [(none)]> START SLAVE; MariaDB [(none)]> SHOW SLAVE STATUS\G slave的I/O和SQL線程都已經開始運行,並且Seconds_Behind_Master再也不是NULL。日誌的位置增長了,意味着一些事件被獲取並執行了。若是你在master上進行修改,你能夠在slave上看到各類日誌文件的位置的變化,一樣,你也能夠看到數據庫中數據的變化。 你可查看master和slave上線程的狀態。在master上,你能夠看到slave的I/O線程建立的鏈接: 在master上輸入show processlist\G; MariaDB [(none)]> SHOW PROCESSLIST\G 行2爲處理slave的I/O線程的鏈接。 在slave服務器上運行該語句: MariaDB [(none)]> SHOW PROCESSLIST\G 行2爲SQL線程狀態,行3爲I/O線程狀態. |
2.測試
(1)在Master上面建立一個數據庫:
MariaDB [(none)]> CREATE DATABASES testdb1; |
(2)在Slave上面查看:
MariaDB [(none)]> SHOW DATABASES; +--------------------+ |
OK!已經同步過來了,下面爲第二種狀況假如master已經運行好久了,想對新安裝的slave進行數據同步,甚至它沒有master的數據。如何指定一個位置開始同步複製:爲了效果我將在Master中導入一些新數據,而且將Slave恢復到最初狀態;
在Master上的操做:
(1)導入新數據:
[root@Master ~]# mysql < hellodb.sql MariaDB [(none)]> SHOW MASTER STATUS; 此時我對數據庫插入一些數據並備份: MariaDB [(none)]> CREATE DATABASE testdb; |
(2)在從服務器上導入:
[root@Slave ~]# mysql < all.sql MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='172.16.41.1', MASTER_USER='tom', MASTER_PASSWORD='qazwsx123', MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=367; MariaDB [(none)]> START SLAVE; |
OK! 簡單的主從複製到此結束! |
MySQL簡單複製應用擴展: echo "*/5 * * * * /usr/sbin/ntpdate YOUR NTP_SERVER_IP" >> /var/cron/root |
未完,有續!