主從複製目的:mysql
mysql服務器穩定性提高,避免單臺mysql服務器宕機後影響整個業務,當出現宕機問題後,能夠當即可以使從機提高爲新的主服務器。從而實現sql高可用冗餘性。linux
1、演示環境web
os:centos6.5sql
sql:mariadb-10.0.12shell
iptables off數據庫
selinux disabledcentos
已裝組件:服務器
Development toolside
Server Platform Development測試
主機master:10.19.90.197
從機slave:10.19.90.111
2、(注:sql安裝不演示,請參考http://ssc4469.blog.51cto.com/6315913/1627739裏的mariadbab安裝,另外我這裏演示的數據庫版本一致的)
master服務器配置:
一、中止服務
# /etc/init.d/mysqld stop
二、修改mysql配置文件,/etc/my.cnf,我這裏僅修改了兩項參數,如圖所示,一個是mysql日誌路徑,一個是server-id爲1
三、建立binlog目錄,修改屬組
# mkdir -pv /mydata/binlogs/ # chown -R mysql:mysql /mydata/binlogs/
四、啓動mysql服務,查看啓動信息
# /etc/init.d/mysqld start
MariaDB [(none)]> grant replication slave,replication client on *.* to '用戶'@'10.19.90.111' identified by '密碼'; //注:用戶密碼必須是當前sql已建立的用戶及密碼 MariaDB [(none)]> flush privileges; //刷新MySQL的系統權限相關表
slave服務器配置:
一、中止服務
# /etc/init.d/mysqld stop
二、修改mysql配置文件,/etc/my.cnf,我這裏僅修改了兩項參數,如圖所示,一個是啓用mysql中繼日誌路徑,一個是server-id爲2
三、建立binlog目錄,修改屬組
# mkdir -pv /mydata/binlogs/ # chown -R mysql:mysql /mydata/binlogs/
四、啓動mysql服務,查看啓動信息
# /etc/init.d/mysqld start
五、鏈接mysql,查看中繼日誌狀態:
(注:中繼日誌:它其實跟複製相關的,與二進制日誌幾乎相同,只不過它不是用於記錄事件的,而是做爲讀取數據的源而且在本地執行的,固然中繼日誌是在從服務器上)
六、查看驗證(此時沒有文件)
# ls /mydata/relaylogs
七、登陸mysql 受權遠程用戶
MariaDB [(none)]> grant replication slave,replication client on *.* to '用戶'@'10.19.90.197' identified by '密碼'; //注:用戶密碼必須是當前sql已建立的用戶及密碼 MariaDB [(none)]> flush privileges; //刷新MySQL的系統權限相關表
3、查看master、slave節點狀態及啓用slave節點
二、maser查看日誌狀態:
三、slave節點查看同步狀態(注:配圖是已經同步中的狀態,實際剛建立完畢,Slave_IO_Running: No,Slave_SQL_Running: No,主要就是看這兩項參數)
注:show slave status 解釋 MariaDB [(none)]> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.19.90.197 Master_User: root Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000002 Read_Master_Log_Pos: 609 Relay_Log_File: relay-bin.000006 Relay_Log_Pos: 818 Relay_Master_Log_File: master-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: SHOW SLAVE STATUS會返回如下字段: Slave_IO_State SHOW PROCESSLIST輸出的State字段的拷貝。SHOW PROCESSLIST用於從屬I/O線程。若是線程正在試圖鏈接到主服務器,正在等待來自主服務器的時間或正在鏈接到主服務器等,本語句會通知您 Master_User 被用於鏈接主服務器的當前用戶。 Master_Port 當前的主服務器接口。 Connect_Retry –master-connect-retry選項的當前值 Master_Log_File I/O線程當前正在讀取的主服務器二進制日誌文件的名稱。 Read_Master_Log_Pos 在當前的主服務器二進制日誌中,I/O線程已經讀取的位置。 Relay_Log_File SQL線程當前正在讀取和執行的中繼日誌文件的名稱。 Relay_Log_Pos 在當前的中繼日誌中,SQL線程已讀取和執行的位置。 Relay_Master_Log_File 由SQL線程執行的包含多數近期事件的主服務器二進制日誌文件的名稱。 Slave_IO_Running I/O線程是否被啓動併成功地鏈接到主服務器上。 Slave_SQL_Running SQL線程是否被啓動。 Replicate_Do_DB,Replicate_Ignore_DB 使用–replicate-do-db和–replicate-ignore-db選項指定的數據庫清單。 Replicate_Do_Table,Replicate_Ignore_Table,Replicate_Wild_Do_Table,Replicate_Wild_Ignore_Table 使用–replicate-do-table,–replicate-ignore-table,–replicate-wild-do-table和–replicate-wild-ignore_table選項指定的表清單。 Last_Errno,Last_Error 被多數最近被執行的查詢返回的錯誤數量和錯誤消息。錯誤數量爲0而且消息爲空字符串意味着「沒有錯誤」。若是Last_Error值不是空值,它也會在從屬服務器的錯誤日誌中做爲消息顯示。 更多相關請參考:http://zhumeng8337797.blog.163.com/blog/static/10076891420115732244591/ 或自行google,關鍵詞:「show slave status」
四、啓動slave同步鏈接服務:
MariaDB [(none)]> start slave -> ; Query OK, 0 rows affected, 1 warning (0.00 sec)
五、slave節點驗證文件查看:
六、slave節點同步狀態查看:
4、master建立庫,測試slave是否同步,這幾步操做不在進行演示,你們本身去試試就OK,很簡單、
5、我這裏講下,mysql主從同步,如何同步已有的數據。
問題:本來197這臺服務器最開始是單項sql服務器,剛纔建立的主從同步,不能同步以前的庫和數據,下面我給你們講下這個問題。
解決方法:
主機開兩個shell窗口,一個進入mysql,一個是shell
一、master 主機阻斷寫操做
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.00 sec)
MariaDB [zentao]> show master status; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | master-bin.000002 | 2040 | | | +-------------------+----------+--------------+------------------+
二、另外一個shell導出master主機相應的數據庫
mysqldump -u root -p --opt -R zentao > /opt/zento-0412.sql
三、解鎖剛纔的鎖定
MariaDB [(none)]> UNLOCK TABLES;
四、同步導出的數據
scp /opt/zentao-0412.sql root@10.19.90.111:/opt/
五、slave主機
中止slave
MariaDB [(none)]> stop slave; Query OK, 0 rows affected (0.03 sec)
六、建立mysql庫
create database zentao;
七、導入數據
mysql -uroot -p'密碼' zentao < /opt/zentao-0412.sql
八、從啓slave
MariaDB [(none)]> reset slave; Query OK, 0 rows affected (0.00 sec)
6、驗證
登陸:master數據庫鏈接的web端,後臺建立一個新用戶,以下:
登陸master數據庫查看 user表 是否有數據寫入;
登陸slave數據庫查看對應的表是否有數據同步過來;
我這裏已同步了 ,懶得寫了。。。。。。
特別注意注意:估計有人建立後同步數據庫時,好比主庫建立一條數據同步沒事,可是修改一條數據沒法同步,重啓slave 在show slave status,會看到Last_SQL_Error:1062 報錯 ,這裏請修改從庫的my.cof配置文件,在裏面加上
slave-skip-errors = 1062 、在查看,數據就同步過來了,去掉配置裏的slave-skip-errors = 1062,重啓數據庫,在更新主庫表,在查看從庫對應的數據,一切正常。OK,就這樣。