MySQL(Mariadb)數據庫實現主從同步(主從復制、實時同步、實時復制)
大家都知道,對於一個帶數據庫的項目來說,數據丟了,就相當於項目毀了。現在很多人都是數據庫跟網站文件分開服務器的(即站庫分離+ 圖床),為的就是保護數據庫。假如網站文件服務器掛了,可以重新再搞一台服務器來重新部署一下頁面,但是如果數據庫沒了呢?那就全部數據沒了。
現在很多人都有了備份數據的習慣,這是非常好的事情。但是備份一般我們現在也是用定時任務,在某個時間節點備份一次或多次,並沒有說實時的備份這樣。那麼這樣一來還是存在風險。因此,今天我們要講的就是MySQL(Mariadb)數據庫數據庫的實時備份(專業術語叫主從同步,即有一台或者多台備用服務器,實時同步主要數據庫服務器的內容)
下面我們正式開始,首先我們要準備至少2台機器,假設一台是我們網站的數據庫服務器A,另一台是用來實時同步A服務器的備用服務器B。
目的:實現當A服務器的數據庫有變動時,實時同步所有變動到B服務器。
我的測試環境是Debian + Mariadb數據庫,提示:主從服務器的數據庫版本最好相同。
安裝Mariadb數據庫並設置root密碼為123456,主從服務器的安裝方法都是一樣的
apt install mariadb-server -y
mysql -uroot -e "set password for root@'localhost' = password('123456');"
mysql -uroot -e "flush privileges;"
一、配置主服務器A
1、修改MySQL(Mariadb)數據庫的配置文件,在配置文件的[mysqld]節點下新增server-id和log-bin參數
Debian的Mariadb配置文件是/etc/mysql/mariadb.conf.d/50-server.cnf
打開該配置文件,並找到[mysqld]節點,在該節點下增加兩個參數
server-id=1
log-bin=mysql-bin
注意:如果節點下之前就有上面兩個參數則不需要重新添加。server-id=1中的1是唯一標識,大家可以自行修改成其它數字,只要不跟後面的從服務器的id相同即可。log-bin表示的是日誌文件,mysql-bin是文件名,也是可以大家隨意修改的。
修改後如下圖:
2、設置MySQL(Mariadb)數據庫允許遠程連接
把/etc/mysql/mariadb.conf.d/50-server.cnf配置文件中的bind-address = 127.0.0.1只允許本機連接改成bind-address = 0.0.0.0允許任意機器連接,要不然後面從服務器會連接不上主服務器
3、登錄MySQL(Mariadb)數據庫,添加給從服務器用來登錄和同步數據使用的賬號
mysql -uroot -p123456
grant replication slave on . to repl@’%’ identified by ‘123456’;
注意輸入結尾的分號,其中.表示所有數據庫,repl是用戶名,123456是密碼,%表示允許所有IP連接,如果想只允許指定IP進行同步,則可以將%替換成具體的IP,如果是想允許某個IP段訪問,則可以改成這種格式:192.168.1.%,表示允許192.168.1.1-12.168.1.255的IP進行訪問。
4、添加完成後輸入exit退出數據庫,然後systemctl restart mysql重啟數據庫服務
5、登錄MySQL(Mariadb)數據庫
mysql -uroot -p123456
show master status;
記錄下File和Position的值,後面配置從服務器的時候需要用到。到此為止,主服務器的配置就已經完成了。
二、配置從服務器B
1、修改MySQL(Mariadb)數據庫的配置文件,在配置文件的[mysqld]節點下新增server-id參數
Debian的Mariadb配置文件是/etc/mysql/mariadb.conf.d/50-server.cnf
打開該配置文件,並找到[mysqld]節點,在該節點下增加兩個參數
server-id=2
注意:如果節點下之前就有上面兩個參數則不需要重新添加。server-id=2中的1是唯一標識,大家可以自行修改成其它數字,注意不要跟之前配置的主服務器的id相同即可。
2、配置主服務器的連接賬號密碼等信息
mysql -uroot -p123456
change master to master_host=’你的主服務器的IP’,master_port=3306,master_user=’主服務器添加的賬號repl’,master_password=’密碼123456′,master_log_file=’mysql-bin.000001′,master_log_pos=313;
log_file就是主服務器File的值,master_log_pos就是主服務器Position的值。
接著執行start slave;啟動同步功能
然後執行show slave status \G;查看同步狀態
看到以下兩個參數是YES就說明主從同步已經配置成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
接下來可以在主服務器上嘗試新建數據庫,建表,增刪改數據,看看是不是所有操作都會同步到從服務器上去了?