MySQL主從備份配置

一、簡介  

  主從備份模式,主庫(maser)和備份庫(slave)數據完全一致。實現數據的多重備份,保障數據的安全性。一般用於讀寫分離,主庫master(InnoDB)用於寫、從庫slave(MyISAM)用於讀取。

  從庫(MyISAM)一般使用DQL語法操作。

  主從模式中,對主庫master的所有操作,都會同步到備庫slave中。注意,主庫和備庫的初始環境必須完全一致,庫、表的初始完全相同。如果master有db1,db2,而slave中只有db1,那麼在master執行drop database db2時,從庫slave會報錯,一旦報錯,那麼之後對master的所有操作,slave都不會再同步執行。此時,只能重新去建立主從備份模式。

二、配置詳解

  1、環境說明

     windows + MySQL 5.7

  2、初始化MySQL

    2.1、本地windows環境,下載的免安裝版本,解壓縮,修改文件夾名稱master01。並在master01目錄下新增data文件夾,供數據庫文件存放。

    2.2、master01中新建my.ini文件,其中配置如下:

[client]
# 設置mysql客戶端連接服務端時默認使用的端口
port=3318
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
port=3318
# 默認存儲引擎innoDB,從庫可設置MyISAM
default-storage-engine=INNODB
# 配置數據庫服務器id,主從配置中必須唯一。
server-id=1
# 配置mysql的安裝路徑
basedir=E:\\soft\\cluster\\mysql\\master01
# 配置mysql的數據庫文件存放位置。也即mysql data的存放位置。
datadir=E:\\soft\\cluster\\mysql\\master01\\data
# 配置可訪問mysql服務的機器ip地址信息。 0.0.0.0代表不限。
bind-address=0.0.0.0
# 配置允許最大連接數
max_connections=200
# 實現級聯的同步,例如雙主雙從中,masterA、masterB互爲主從,slaveB爲masterB的從庫,那麼masterB中必須設置級聯參數,這樣,在masterA中的更新才能夠最終執行到slaveB上
# 此參數默認關閉狀態,如果不手動設置,那麼bin-log只會記錄直接在本庫中執行的SQL語句,
# 而由複製replication機制的SQL線程讀取的reply-log而執行的SQL是不會記錄到bin-log中的,那麼也就是說,無法再繼續的執行相關的SQL。那麼保證不了最終一致性
# 簡單說就是設置主服務器之間複製的數據是否需要往下面的從服務器中去複製,有這個字段表示往下面的從服務器中去複製
# 在多個主從配置的時候,根據業務場景選擇是否添加此參數
log-slave-updates
# 配置二進制文件binlog
# 這裏配置定義的只是個index索引文件,即會生成的是mysql-bin.index文件,而實際存儲數據的是類似於mysql-bin.000001之類的文件,超出範圍會繼續生成mysql-bin.000002,以此類推
log-bin=mysql-bin
# 配置bin-log文件的模式。
# STATEMENT:基於sql語句級別,記錄每一條修改數據的sql語句。mysql默認採用策略
# ROW:基於行的級別。記錄每一行記錄的變化,也即記錄每一行的修改都記錄binlog中,不記錄sql語句。記錄數據行的變化。在全表修改的時候,會產生大量的日誌記錄
# MIXED:上述兩種混合模式。默認使用STATEMENT,特殊情況下切換ROW。比如DML更新INNODB表。
binlog_format = MIXED
# 刷盤配置,默認爲0,表示的是刷盤時間由OS來決定,每隔一段時間就會刷新緩存數據到磁盤中
# 可設置值,代表的是沒多少個事務提交刷一次binlog
#sync_binlog=0

    2.3、複製master01文件夾,分別命名爲slave01、master02、slave02

    2.4、分別修改slave01、master02、slave02中的my.ini配置文件,端口號port分別修改爲3319、3320、3321。數據庫服務器server-id分別爲2、3、4(一般可設置爲ip+port)。

       存儲目錄baseDir和dataDir分別修改爲對應目錄。

    2.5、slave01、slave02的my.ini配置文件中,修改存儲引擎爲  default-storage-engine=MyISAM,去除 log-slave-updates 配置。

    2.6、開啓是個命令行窗口分別進入四份數據庫的 bin 目錄下,執行 mysqld --initialize  初始化數據庫,初始化成功後,可看到data目錄下生成了一些列的初始文件。

    2.7、分別執行 mysqld --console  啓動 MySQL服務,啓動成功後,不要關閉命令行窗口。此種方式,ctrl+c終止批處理命令或者關閉了窗口,都會是將MySQL服務停止。

  3、配置雙主雙從

    3.1、雙主雙從模式下的結構圖如下:

      

    3.2、另外開啓四個命令窗口,分別進入四個bin目錄下,執行 mysql -uroot -p  初始無密碼進入MySQL。

       分別執行  set password for root@localhost=password('123456');  修改root密碼

    3.3、主庫master01、master02分別創建備庫使用的授權賬戶信息: GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'127.0.0.1' IDENTIFIED BY 'slavepwd1111'; 

        執行成功後,刷新權限信息: flush privileges; 

      重置master日誌文件信息: reset master;   注意:此命令不能用於任何slave正在正在運行的主從關係的主庫。此命令會重置主庫的binlog日誌記錄文件,刪除所有的已有的binlog文件,初始化的創建一個從000001開始的新的日誌文件,如果非首次搭建,主庫中存量數據,此命令最好不要使用。會丟失binlog日誌文件。

    3.4、查看主庫日誌文件  show master status;   此時一般顯示如下:

      

      上圖中的File列中的內容,後面對應的從庫配置的時候,需要填入配置的。

    3.5、主從庫的同步配置

      master01、slave02執行:

    stop slave;
      reset slave;
      change master to master_host='127.0.0.1',master_port=3320,master_user='slaveuser',master_password='slavepwd1111',master_log_file='mysql-bin.000001';
      start slave;

      master02、slave01執行:

      stop slave;
      reset slave;
      change master to master_host='127.0.0.1',master_port=3318,master_user='slaveuser',master_password='slavepwd1111',master_log_file='mysql-bin.000001';
      start slave;

    其中的用戶名、密碼、binlog配置都在前面中配置查看到。

    啓動完成後,從庫的日誌文件中會有類似下面的語句:

    3.6、查看從庫是否正常,執行 show slave status \G; ,如果爲以下數據,錯誤數爲0,從庫連接主庫配置無誤

 

 三、總結

  以上配置完雙主雙從後,在任何一個主庫中的操作,都會同步執行到四份數據庫實例中,達到一定的數據備份、數據庫高可用的功能。

  另外,文中的MySQL啓動方式  mysqld --console  是爲了方便看日誌記錄,也可以進行 mysql install; net start mysql;net stop mysql;進行服務的啓停。

  本地測試的時候,可新建兩個bat批處理,一次性啓動 4 個MySQL服務,一次性啓動連接是個MySQL,簡單如下:

  1、啓動MySQL服務 start_mysql.bat

@echo off
echo "start mysql..."
start "master01" e:/soft/cluster/mysql/master01/bin/mysqld --console
start "slave01" e:/soft/cluster/mysql/slave01/bin/mysqld --console
start "master02" e:/soft/cluster/mysql/master02/bin/mysqld --console
start "slave02" e:/soft/cluster/mysql/slave02/bin/mysqld --console
#pause

  2、啓動MySQL命令行並連接  connect-mysql.bat

@echo off
echo "start mysql..."
start "master01-connect" e:/soft/cluster/mysql/master01/bin/mysql -uroot -p123456
start "slave01-connect" e:/soft/cluster/mysql/slave01/bin/mysql -uroot -p123456
start "master02-connect" e:/soft/cluster/mysql/master02/bin/mysql -uroot -p123456
start "slave02-connect" e:/soft/cluster/mysql/slave02/bin/mysql -uroot -p123456
#pause

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章