一、環境準備
-
Windows 7 64位
-
MySQL 5.6
- 主庫:192.168.103.207
- 從庫:192.168.103.208
- navicat沒法鏈接MySQL8解決方案
#修改加密規則 ALTER USER 'root123'@'%' IDENTIFIED BY 'root123' PASSWORD EXPIRE NEVER; #更新密碼(mysql_native_password模式) ALTER USER 'root123'@'%' IDENTIFIED WITH mysql_native_password BY 'root123';
二、配置新數據庫的主從複製
2.一、修改主庫配置文件
先在主數據庫中建立新數據庫rep_test。html
而後編輯主數據庫的 my.ini 文件mysql
在 [mysqld] 節點中增長或修改以下內容:sql
server-id=1 #指定惟一的ID,1至32,必須的 log-bin=mysql-log-bin #指定二進制日誌存放路徑,必須的 binlog-do-db=rep_test #指定要同步的數據庫,必須的 #binlog-ignore-db=mysql #指定不要同步的數據庫,若是指定了binlog-do-db就不用再指定該項
2.二、配置主庫備份帳戶
重啓主數據庫,而後在主數據庫中創建一個備份帳戶數據庫
mysql>grant replication slave on *.* to slave@192.168.103.208 identified by 'slave123' ; mysql>flush privileges;
PS:identified by 指定的slave是帳號slave@192.168.1.128 的密碼centos
2.三、查看主服務器狀態
顯示主服務器的狀態信息,而且找到File 和 Position 的值記錄下來;服務器
mysql>show master status;
2.四、修改從庫配置文件
在從數據庫中建立新的數據庫rep_test。架構
而後編輯從數據庫的 my.ini 文件dom
在 [mysqld] 節點中增長以下內容:ide
server-id=2 #指定惟一的ID,2至32,必須的,而且不能跟主數據庫同樣 replicate-do-db=rep_test #指定要同步的數據庫,必須的 #replicate-ignore-db=mysql #指定不要同步的數據庫,
2.五、設置從庫slave
重啓從數據庫,設置登陸主數據庫的帳號和密碼等信息,而後啓動slave測試
mysql>change master to master_host='192.168.103.207',master_port=3307,master_user='slave',master_password='slave123', master_log_file='mysql-log-bin.000001',master_log_pos=407; mysql>start slave;
2.六、查看從數據庫的信息
mysql>show slave status \G;
若是出現: Slave_IO_Running: Yes Slave_SQL_Running: Yes以上兩項都爲Yes,那說明沒問題了
2.七、測試主從複製
在主數據庫中建立一個新的表,而後再切換到從數據庫查看是否一樣多出同名的數據庫
2.八、清除主從關係
mysql主從複製中,須要將主從複製關係清除,須要取消其從庫角色。這可經過執行 RESET SLAVE ALL 清除從庫的同步複製信息、包括鏈接信息和二進制文件名、位置。從庫上執行這個命令後,使用show slave status將不會有輸出。
刪除master.info和relay-log.info文件;
刪除全部的relay log(包括尚未應用完的日誌),建立一個新的relay log文件;
從Mysql 5.5開始,多了一個all參數。若是不加all參數,那麼全部的鏈接信息仍然保留在內存中,包括主庫地址、端口、用戶、密碼等。這樣能夠直接運行start slave命令而沒必要從新輸入change master to命令,而運行show slave status也仍和沒有運行reset slave同樣,有正常的輸出。但若是加了all參數,那麼這些內存中的數據也會被清除掉,運行show slave status就輸出爲空了。
mysql>stop slave; QueryOK, 0 rowsaffected (0,00 sec) mysql>reset slave all; QueryOK, 0 rowsaffected (0,04 sec) mysql> show slave status\G Emptyset (0,00 sec)
RESET MASTER
功能說明:刪除全部的binglog日誌文件,並將日誌索引文件清空,從新開始全部新的日誌文件。用於第一次進行搭建主從庫時,進行主庫binlog初始化工做;
測試以下:
未刪除前
[root@mysql01 mysql]# pwd /usr/local/data/mysql [root@mysql01 mysql]# ls auto.cnf client-cert.pem ibdata1 ibtmp1 localhost.localdomain.pid mysql-bin.000002 mysql-bin.000005 mysqld_safe.pid public_key.pem sys ca-key.pem client-key.pem ib_logfile0 imove mysql mysql-bin.000003 mysql-bin.000006 performance_schema server-cert.pem ca.pem ib_buffer_pool ib_logfile1 localhost.localdomain.err mysql-bin.000001 mysql-bin.000004 mysql-bin.index private_key.pem server-key.pem [root@localhost bin]# ./mysql -uroot -p123456 mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000006 | 16663694 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) mysql>
當前有6個binlong日誌,且Position的位置爲16663694
運行RESET MASTER
mysql> reset master; Query OK, 0 rows affected (0.03 sec) mysql> show master status\G; *************************** 1. row *************************** File: mysql-bin.000001 Position: 107 Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.00 sec)
顯示全部的binlog已經被刪除掉,且binlog從000001 開始記錄
注:當數據庫要清理binlog文件的時候,能夠經過操做系統進行刪除,也能夠運行reset master進行刪除。可是若是當前是主數據庫,且主從數據庫正常的時候,千萬不能用這種方式刪除。
【使用場景】第一次搭建主從數據庫時,用於主庫的初始化binglog操做。
RESET SLAVE
功能說明:用於刪除SLAVE數據庫的relaylog日誌文件,並從新啓用新的relaylog文件;
測試以下:
登陸從數據庫,未刪除前
mysql> show slave status\G; *************************** 1\. row *************************** Slave_IO_State: Connecting to master Master_Host: 192.168.47.167 Master_User: server Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000019 Read_Master_Log_Pos: 12992 Relay_Log_File: mysql02-relay-bin.000004 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000019
當前relaylog爲0004;
先中止slave,運行RESET MASTER
mysql> stop slave; Query OK, 0 rows affected (0.01 sec) mysql> reset slave; Query OK, 0 rows affected (0.04 sec) mysql> show slave status\G; *************************** 1\. row *************************** Slave_IO_State: Master_Host: 192.168.47.167 Master_User: server Master_Port: 3306 Connect_Retry: 60 Master_Log_File: Read_Master_Log_Pos: 4 ** Relay_Log_File: mysql02-relay-bin.000001 Relay_Log_Pos: 4**
RESET SLAVE將使SLAVE忘記主從複製關係的位置信息。該語句將被用於乾淨的啓動, 它刪除master.info文件和relay-log.info 文件以及全部的relay log 文件並從新啓用一個新的relaylog文件。
使用場景:當原來的主從關係被破壞以後,從庫通過從新初始化後直接鏈接會報 ERROR 1201的錯誤,運行reset slave後,從新配置主從鏈接就能夠了;
三、配置舊數據庫的主從複製
3.一、修改主庫配置文件
若是一開始數據庫的架構不是主從複製,而且運行一段時間後已經有數據存在,那配置的方式略有不一樣。
在從數據庫中建立新的數據庫landclash。
編輯主數據庫的 my.ini 文件,使用如下內容:
server-id=1 #指定惟一的ID,1至32,必須的 log-bin=mysql-log-bin #指定二進制日誌存放路徑,必須的 binlog-do-db=landclash #binlog-ignore-db=mysql #指定不要同步的數據庫,若是指定了binlog-do-db就不用再指定該項
配置主庫備份帳戶
mysql>grant replication slave on *.* to slave123@192.168.103.208 identified by 'slave123' ; mysql>flush privileges;
3.二、主數據庫中鎖定全部的表
重啓主數據庫,而後在主數據庫中鎖定全部的表
mysql>flush tables with read lock;
3.三、查看主服務器狀態
顯示主服務器的狀態信息,而且找到File 和 Position 的值記錄下來;
mysql>show master status;
3.四、數據拷貝
將主數據庫data目錄下須要作主從複製的數據庫的同名目錄拷貝到從數據庫的data目錄下
注意:拷貝的話也要拷貝 ibdata1 文件,否則會不顯示錶結構
3.五、修改從庫配置文件
編輯從數據庫的 my.ini 文件,加上一下內容:
server-id=2 #指定惟一的ID,2至32,必須的,而且不能跟主數據庫同樣 replicate-do-db=landclash #指定要同步的數據庫,必須的 #replicate-ignore-db=mysql #指定不要同步的數據庫,
3.六、設置從庫slave
重啓從數據庫,由於主數據庫在從新配置my.ini後,日誌文件變成新的文件,因此須要再次設置登陸主數據庫的帳號和密碼等信息
mysql> stop slave; mysql>change master to master_host='192.168.103.207',master_port=3307,master_user='slave123',master_password='slave123', master_log_file='mysql-log-bin.000001',master_log_pos=742; mysql>start slave;
3.七、查看從數據庫的信息
再次輸入查看從數據庫狀態的命令
mysql>show slave status \G;
咱們看到紅框標註的地方跟以前作新數據庫主從複製不同了。
3.八、主數據庫解鎖
完成上述配置後,回到主數據庫,將表解鎖
mysql>unlock tables;
以後在主數據庫的修改就能同步到從數據庫上了。
四、數據庫備份
4.1備份腳本
- sql備份 DataBackupSql.bat
rem *******************************Code Start***************************** @echo off set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump" -P3307 -uroot123 -proot123 landclash > c:\db_bak\landclash_%Ymd%.sql @echo on rem *******************************Code End*****************************
- 文件備份 DataBackupFile.bat
*******************************Code Start***************************** net stop mysql xcopy "C:\ProgramData\MySQL\MySQL Server 5.6\data\landclash\*.*" "c:\db_bak\landclash\%date:~0,10%\" /S /I xcopy "C:\ProgramData\MySQL\MySQL Server 5.6\data\ibdata1" "c:\db_bak\landclash\%date:~0,10%\" /S /I net start mysql *******************************Code End *****************************
4.二、增量備份
小量的數據庫能夠天天進行完整備份,由於這也用不了多少時間,但當數據庫很大時,就不太可能天天進行一次完整備份了,這時候就可使用增量備份。增量備份的原理就是使用了mysql的binlog志。
一、首先作一次完整備份:
mysqldump -h192.168.103.207 -P3307 -uroot123 -proot123 --single-transaction --master-data=2 test > test.sql
這時候就會獲得一個全備文件 test.sql
在sql文件中咱們會看到:
-- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000002', MASTER_LOG_POS=107;是指備份後全部的更改將會保存到bin-log.000002二進制文件中。
二、在test庫的t_student表中增長兩條記錄,而後執行 flush logs 命令。這時將會產生一個新的二進制日誌文件bin-log.000003,bin-log.000002則保存了全備事後的全部更改,既增長記錄的操做也保存在了bin-log.00002中。
三、再在test庫中的a表中增長兩條記錄,而後誤刪除t_student表和a表。a中增長記錄的操做和刪除表a和t_student的操做都記錄在bin-log.000003中。
自動增量備份腳本:
IncreaseDB.sql
flush logs;
DataBackupFile_IncreaseDB.bat
*******************************Code Start***************************** "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql.exe" -P3307 -uroot123 -proot123 < "C:\Program Files\MySQL\MySQL Server 5.6\bin\IncreaseDB.sql" *******************************Code End *****************************
4.三、恢復
一、首先導入全備數據
mysql -h192.168.103.207 -P3307 -uroot123 -proot123 < test.sql
也能夠直接在mysql命令行下面用source導入
mysql>source "test.sql"
二、恢復bin-log.000002
mysqlbinlog bin-log.000002 |mysql -h192.168.103.207 -P3307 -uroot123 -proot123
三、恢復部分 bin-log.000003
在general_log中找到誤刪除的時間點,而後更加對應的時間點到bin-log.000003中找到相應的position點,須要恢復到誤刪除的前面一個position點。
能夠用以下參數來控制binlog的區間
--start-position 開始點 --stop-position 結束點
--start-date 開始時間 --stop-date 結束時間
找到恢復點後,既能夠開始恢復。
mysqlbinlog mysql-bin.000003 --stop-position=208 |mysql -h192.168.103.207 -P3307 -uroot123 -proot123