背景:由於工做的關係,須要找尋實時同步數據到另外系統的服務器的數據庫上,查詢下來,用mariadb進行跨服務器的同步數據動做,用主從同步比較多,也比較保險mysql
也有使用shell腳本的,定時定候的執行mysqldump的shell腳本,可是若是crontab壞掉了,或是被取消,甚至時間被更改,數據庫被改動密碼等等,就須要作更多的異動,sql
可是shell腳本仍是on the table的,能夠深入的考慮一下。shell
下面呢,就開始此次主從同步的設置經驗。數據庫
前置準備:服務器
先要將須要同步的表格數據利用mysqldump作一個同步,再進行接下來的主從同步是可以保證新增的users可以實時的跑到另一個服務器上去ide
同步命令:測試
(主)==> 導出數據: 命令行
mysqldump -uroot -pPassword database table > 1.sql
(從)==> 導入數據:rest
mysql -uroot -pPassword database < 1.sql
1、機器簡介日誌
主:192.168,60,130
從:192.168.60.129
OS版本:CentOS 7.4
mariaDB版本:5.5
2、配置主服務器
1)修改主服務器的mariadb配置文件
打開mariadb的配置文件/etc/my.cnf,在[mysqld]節點下添加以下的內容:
#表示主服務器 server-id = 1 #記錄日誌 log-bin=mysql-bin01 #提供數據同步服務的數據庫,在此數據庫下的數據可同步到從服務器中 binlog-do-db=#這裏須要備份什麼數據庫就寫什麼數據庫的名稱 #設置在主服務器上不記錄日誌的數據庫 binlog-ignore-db=mysql #日誌過時時間 expire_logs_days=10
注意: 若是配置文件已經存在了上述的項目,覆蓋原有的便可
這裏須要重啓一下主服務器的數據庫 ==> systemctl restart mariadb,要否則配置文件的修改不生效,沒法繼續下面的操做
2)查看主服務器的狀態
此步驟要打開數據庫命令行,輸入命令:
MariaDB [mysql]> show master status; +--------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+----------+--------------+------------------+ | mysql-bin01.000004 | 1243 | tcloud | mysql | +--------------------+----------+--------------+------------------+
這部分須要記住File和Position的值,到以後的配置須要使用
3)查看log_bin的狀態
數據庫命令行中,輸入命令:
MariaDB [mysql]> show variables like "%log_bin%"; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin | ON | | log_bin_trust_function_creators | OFF | | sql_log_bin | ON | +---------------------------------+-------+
此部分若是log_bin是ON,即表示正常開啓。
4)建立主服務器用戶及權限(專門爲從服務器鏈接建立一個用戶,和分配一個權限)
MariaDB [mysql] > grant replication slave on *.* to 'mysql'@'192.168.60.129' identified by '123456'; #解釋: 這裏是建立了一個mysql的用戶,密碼爲123456,鏈接本機的數據庫地址爲從服務器的IP,即只容許該用戶擁有從服務器的IP訪問數據庫並備份表的權限
這裏還要注意一點:replication 屬於grant權限,後面只能用*.*,不能指定某個數據庫或者某個數據表,若是指定相似select等普通權限可具體到數據表。
5) 重啓主服務器的mariadb
3、配置從服務器
1) 修改配置文件
打開配置文件/etc/my.cnf,在[mysqld]節點下增長以下內容:
#表示從服務器 server-id=2 #記錄日誌 log-bin=mysql-bin02 #同步的數據庫 replicate-do-db=#要同步的數據庫 #同步的數據庫指定表 replicate-do-db=#要同步的表 #不記錄日誌的數據庫 replicate-ignore-db=mysql #日誌過時時間 expire_logs_days=10
2) 打開命令行,執行一下命令,來設置master信息
change master to master_host='192.168.60.130',#主服務器地址 master_user='mysql',#主服務器數據庫用戶名 master_password='123456',#主服務器數據庫密碼 master_log_file='mysql-bin01.000004', #填寫步驟2(2)中File項的值 master_log_pos=1243; #填寫步驟2(2)中Position的值
3) 重啓從服務器mariadb
4) 執行啓動從服務器命令(在從服務器數據庫命令行進行)
MariaDB [mysql] > start slave;
5) 查看slave的運行狀態命令
MariaDB [mysql] > start slave;
查看User值爲system user的項,若是其State值爲「Waiting for master to send event」和」Slave has read all relay log: waiting for the slave I/O thread to update it「,則從服務器已鏈接主服務器。
6) 查看slave運行狀態
MariaDB [mysql] > show slave status;
若是Slave_IO_Running的值爲Yes,Slave_SQL_Running的值爲Yes,則從服務器正常運行。若是不正確,查看錯誤日誌,通常位於data目錄下。
4、測試
從服務器數據庫中新建數據庫pension,主服務器中新建表並插入數據,查看從服務器數據庫,是否存在相同的數據庫表及數據。
PS:
若是以上的修改沒有正常,而且在中間出現的配置文件配置的問題,則須要先在從服務器的mariadb命令行裏先stop slave,而後再修改其餘的問題
修改完成後,去查看一下主服務器的狀態是否已經改變 show master status(重點關注File和Position參數)
若是改變了要從新記下來,而後在slave的服務器上再次執行change master to .... ==> start slave (這樣的過程)