環境:mysql
系統硬件:vmware vsphere (CPU:2*4核,內存2G,雙網卡)sql
系統版本:CentOS-7-x86_64-Minimal-1611.iso數據庫
數據庫版本信息 : 10.1.20-MariaDB Source distributionvim
主服務器的IP:192.168.1.14centos
從服務器的IP:192.168.1.15服務器
從服務器的IP:192.168.1.16ide
步驟:測試
1.準備命令行
三臺服務器安裝好MariaDB線程
2.主服務器設置
2.1.修改主機名稱
[root@centos ~]# hostnamectl --static set-hostname dbmaster
[root@centos ~]# systemctl restart network
2.2 修改IP地址
[root@centos ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16780032
找到BOOTPROTO,而且修改(設爲靜態網址)
BOOTPROTO="static"
在最後添加三行內容(添加本機IP,子網掩碼,網關)
IPADDR="192.168.1.14"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
:wq 保存退出
2.3 重啓
[root@centos ~]# shutdown -r now
2.4 配置主數據庫
[root@dbmaster ~]# vim /etc/my.cnf
查找 log-bin=mysql-bin 行,確保此行生效,而且增長如下內容
log-bin=mysql-bin
log-bin-index = mysql-bin.index
查找 Server-id行,設置好ID(這裏設置爲1014,能夠隨意設置,只要惟一便可)
server-id = 1014
:wq 保存退出
重啓數據庫服務,查看是否正常運行
[root@dbmaster ~]# systemctl restart mysql
[root@dbmaster ~]# systemctl status mysql -l
2.5 添加主從同步用戶
[root@dbmaster ~]# mysql -u root -p
輸入密碼,進入數據庫命令行。主服務器上創建同步(REPLICATION SLAVE)賬號 (運行環境不要將密碼設置過於簡單)
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456';
MariaDB [(none)]> FLUSH PRIVILEGES;
增長三個測試數據庫 t1 t2 t3
MariaDB [(none)]> show databases;
MariaDB [(none)]> create database t1;
MariaDB [(none)]> create database t2;
MariaDB [(none)]> create database t3;
MariaDB [(none)]> show databases;
查看主服務器狀態
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000027 | 460 | | |
+------------------+----------+--------------+------------------+
3.從服務器01設置
3.1.修改主機名稱
[root@centos ~]# hostnamectl --static set-hostname dbslave01
[root@centos ~]# systemctl restart network
3.2 修改IP地址
[root@centos ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16780032
找到BOOTPROTO,而且修改(設爲靜態網址)
BOOTPROTO="static"
在最後添加三行內容(添加本機IP,子網掩碼,網關)
IPADDR="192.168.1.15"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
:wq 保存退出
3.3 重啓
[root@centos ~]# shutdown -r now
3.4 配置從數據庫01
[root@dbslave01 ~]# vim /etc/my.cnf
查找 log-bin行,禁止日誌文件生成
#log-bin=mysql-bin
查找如下 binlog_format=mixed ,在下面添加如下內容
relay-log = relay-log
relay-log-index = relay-log.index
查找 Server-id行,設置好ID(這裏設置爲1015,能夠隨意設置,只要惟一便可)
server-id = 1015
在此行下,添加如下內容
replicate-wild-ignore-table=mysql.%
log-slave-updates
read-only = ON
:wq 保存退出
重啓數據庫服務,查看是否正常運行
[root@dbslave01 ~]# systemctl restart mysql
[root@dbslave01 ~]# systemctl status mysql -l
3.5 查看從數據庫狀態
[root@dbslave01 ~]# mysql -u root -p
輸入密碼,進入數據庫命令行。查看數據只否處於只讀狀態
MariaDB [(none)]> show global variables like 'read%';
+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| read_buffer_size | 1048576 |
| read_only | ON |
| read_rnd_buffer_size | 4194304 |
+----------------------+---------+
*** 若有須要,能夠臨時設置數據庫可寫
MariaDB [(none)]> set global read_only=1;
*****************************************************************************************************************************************
建立僅指定數據庫能夠訪問的用戶,(經過my.cnf將從服務器配置爲只讀模式. 在只讀模式下, 只有super權限的用戶和slave同步線程才能寫入.)
MariaDB [(none)]>GRANT ALL PRIVILEGES ON DatabaseName.* TO 'wroot'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
*****************************************************************************************************************************************
3.6 將主數據庫的現有表,所有複製到從數據庫
3.6.1 進入主數據庫,若是須要能夠爲mysqldump增長軟鏈接
[root@dbmaster ~]# ll /opt/mysql/bin/mysqldump
[root@dbmaster ~]# ln -s /opt/mysql/bin/mysqldump /bin
3.6.2 在主服務器生成一個快照版本(生成以後,不要再進行數據庫改動,不然同步不上)
查看InnoDB全部的數據都同步到磁盤
[root@dbmaster ~] mysql -u root -p
MariaDB [(none)]> show engine innodb status;
[root@dbmaster ~] cd /data
若是隻有INNODB,就用以下命令生成快照:
[root@dbmaster ~]# mysqldump -uroot -p --events --triggers --routines --flush-logs --master-data=2 --lock-all-tables --databases t1 t2 t3> dbbackup.sql
--single-transaction 這個參數只對innodb適用,實現熱備InnoDB表;所以,不須要同時使用--lock-all-tables;
--databases 後面跟除mysql之後的其餘全部數據庫的庫名 (測試庫上只有 t1 t2 t3 三個庫)
--master-data 參數會記錄導出快照時候的mysql二進制日誌位置,一會會用到。
--lock-all-tables 爲全部表加讀鎖
*** 若是有MYISAM或者既有MYISAM又有INNODB,就用以下命令生成快照
mysqldump -uroot -p --events --triggers --routines --flush-logs --master-data=2 --lock-tables --databases test > dbbackup.sql
查看主服務器狀態
[root@dbmaster ~]# mysql -u root -p
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000027 | 460 | | |
+------------------+----------+--------------+------------------+
3.6.3 將主數據庫的快照版本還原到從服務器01上
[root@dbmaster ~]# scp /data/dbbackup.sql root@192.168.1.15:/data
3.6.4 打開從服務器01,查看是否已經上傳成功
[root@dbslave01 ~]# cd /data
[root@dbslave01 ~]# ll
使用grep命令查找到二進制日誌的名稱以及位置(顯示的信息,應該必須和主服務器當前的 show master status 的一致)
[root@dbslave01 ~]# grep -i "change master" dbbackup.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000027', MASTER_LOG_POS=460;
[root@dbslave01 ~]# mysql -u root -p
輸入密碼,進入數據庫命令行。將主數據庫快照恢復數據從數據庫01中
[root@dbslave01 ~]# show databases;
[root@dbslave01 ~]# source /data/dbbackup.sql
[root@dbslave01 ~]# show databases;
設置從服務器01,同步主服務器
[root@dbslave01 ~]# change master to master_host='192.168.1.14',master_user='mysync',master_password='q123456',master_log_file='mysql-bin.000027',master_log_pos=460;
說明:
master_host 指定主服務器IP地址
master_user 主服務器專用於同步的用戶名稱(以前在主服務器上設置的)
master_password 主服務器專用於同步的用戶密碼
master_log_file 主服務器當前日誌文件名稱(必須對應)
master_log_pos 主服務器當前日誌位置(必須對應)
啓用從服務器01的同步
[root@dbslave01 ~]# start slave;
查看狀態
[root@dbslave01 ~]# show slave status\G:
查看Slave_IO_Running和Slave_SQL_Running的狀態,若是都爲Yes,那麼就成功了。
*** 若是設置錯誤,能夠先中止同步狀態,而後清空同步狀態 ,再作一次
中止同步狀態
[root@dbslave01 ~]# stop slave;
清空同步狀態(清空後,同步的日誌名稱、日誌位置都會爲空,要注意)
[root@dbslave01 ~]# reset slave;
****************
4 測試主服務,從服務器01的數據庫同步
4.1 打開主服務器
[root@dbmaster ~]# mysql -u root -p
刪除 t1 數據庫,增長 t4 數據庫
MariaDB [(none)]> show databases;
MariaDB [(none)]> drop database t1;
MariaDB [(none)]> create database t4;
MariaDB [(none)]> show databases;
查看主服務器狀態(注意當前日誌文件名稱,日誌位置)
MariaDB [(none)]> show master status;
4.2 打開從服務器
[root@dbslave01 ~]# mysql -u root -p
查看從服務器01上的數據庫
MariaDB [(none)]> show databases;
查看從服務器狀態
MariaDB [(none)]> show slave status \G;
特別留意下面兩行,是否對應主服務器當前的名稱和位置 (另外須要注意,是否有額外錯誤行信息,若是一切正常,將不會有錯誤信息)
Master_Log_File: mysql-bin.000027
Read_Master_Log_Pos: 460
5.從服務器02設置
(從服務器02操做與從服務器02同樣)
***
同步查看要點,查看主數據庫的show master status 以及各從服務器 show slave status\G,相對應的當前日誌文件名稱和位置是否對應,各從服務器show slave status\G是否有錯誤信息。
有可能出現同步錯誤的地方,主數據器和從服務器的安裝始數據不一致(包括數據庫,表,行數據等)。(例如同步狀況下,主數據刪除表,此表在從數據庫中不存在,則會出現錯誤)
一旦 show slave status\G,出現錯誤信息。能夠按如下操做執行。
1.主數據庫設置爲只讀。
MariaDB [(none)]> set global read_only=1;
2.生成主服務器的數據庫快照,並上傳到從服務器
[root@dbslave01 ~]# cd /data
[root@dbslave01 ~]# rm -rf dbbackup.sql
[root@dbslave01 ~]# mysqldump -uroot -p --events --triggers --routines --flush-logs --master-data=2 --lock-all-tables --databases t1 t2 t3> dbbackup.sq
[root@dbslave01 ~]# scp /data/dbbackup.sql root@192.168.1.15:/data
MariaDB [(none)]> show master status;
3.從服務器的數據庫中止同步狀態,並進行同步狀態重設
MariaDB [(none)]>stop slave;
MariaDB [(none)]>reset slave;
4.將主數據庫快照,恢復到從服務器上
[root@dbslave01 ~]# cd /data
[root@dbslave01 ~]# grep -i "change master" dbbackup.sql
[root@dbslave01 ~]# source /data/dbbackup.sql
5.從新設置從服務器的數據庫同步
[root@dbslave01 ~]# change master to master_host='192.168.1.14',master_user='mysync',master_password='q123456',master_log_file='mysql-bin.000027',master_log_pos=460;
6.啓動從服務器的同步,查看各服務器狀態是否正常
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G:
7.主數據庫設置爲可寫。
MariaDB [(none)]> set global read_only=0;