Mariadb數據庫設置及操做 一主多從 備份還原(實測筆記)

環境: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;

相關文章
相關標籤/搜索