網上的資料已經挺多的了,但是學習過程中還是要記錄一下:
Mysql主從復制的實現原理圖大致如下:
MySQL之間數據復制的基礎是二進制日志文件(binary log file)。一台MySQL數據庫一旦啟用二進制日志后,其作為master,它的數據庫中所有操作都會以“事件”的方式記錄在二進制日志中,其他數據庫作為slave通過一個I/O線程與主服務器保持通信,並監控master的二進制日志文件的變化,如果發現master二進制日志文件發生變化,則會把變化復制到自己的中繼日志中,然后slave的一個SQL線程會把相關的“事件”執行到自己的數據庫中,以此實現從數據庫和主數據庫的一致性,也就實現了主從復制。
主機:(直接與應用程序進行數據通訊)
操作系統:linux(Ubuntu18.04 X64)
數據庫:mysql 5.7
IP地址:192.168.0.159
從機:(監控主數據庫的變化與其同步,主數據庫崩潰數據轉儲,備份等功能)
操作系統:linux(Ubuntu18.04 X64)
數據庫:mysql 5.7
IP地址:192.168.0.164
管理機:(界面可視化數據庫,用於監控數據庫數據,相比在linux中查看數據庫要方便)
操作系統:windows10
管理軟件:Navicat 12
IP地址:192.168.0.143
一、首先安裝數據庫
二、配置主數據庫
1、找到主數據庫的配置文件,我的數據庫位置及相關操作如下:
打開數據庫的配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
2、修改配置文件(包括有說明,詳細功能自己閱讀、例子我只需要同步master數據庫),保存退出
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
#其中1 代表主數據庫(源) 2代表輔數據庫
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
# 主從復制模式
#binlog_format=STATEMENT
#binlog_format=ROW
binlog_format=MIXED
# 控制binlog的寫入頻率。每執行多少次事務寫入一次
# 這個參數性能消耗很大,但可減小MySQL崩潰造成的損失
sync_binlog=1
# 日志保留時間和大小
expire_logs_days = 10
max_binlog_size = 100M
# 同步/不同步哪些數據庫
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name
binlog-ignore-db = sys
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
binlog-do-db = master
三、重啟mysql服務,查詢master狀態
1、中期mysql服務用來刷新配置文件
sudo service mysql restart
2、查詢master狀態
show master status\G;
四、添加主從數據庫同步的用戶
點我查看如何添加用戶, 添加完之后要刷新權限。
五、修改從數據庫配置
1、找到從數據庫的配置文件,我的數據庫位置及相關操作如下:
打開數據庫的配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
2、修改配置文件,保存退出
server-id = 2
3、重啟mysql服務
sudo service mysql restart
六、執行同步命令
1、給從數據庫鏈接主數據庫的二進制日志
` 執行同步命令,設置主數據庫ip,同步帳號密碼,同步位置`
mysql>change master to
->master_host='192.168.0.159',
->master_user='yzp',
->master_password='123456',
->master_log_file='mysql-bin.000001',
->master_log_pos=6417;
2、開啟同步功能
# 開啟同步功能
mysql>start slave;
3、檢查從數據庫狀態
show slave status\G;
注意:Slave_IO_Running及Slave_SQL_Running進程必須運行為YES狀態,否則說明同步失敗。
錯誤處理:
一、第一次運行從服務器報錯:主從使用了相同的server UUID
二、查看從機狀態salve_io_runnini或slave_sql_running為no時的處理:
三、錯誤類型1032、1062:
解決方法:
跳過指定數量事務:方法見錯誤處理二;
跳過指定類型事務:點我查看詳細操作方式
四、錯誤類型1236
Slave I/O: Got fatal error 1236 from master when reading data from binary log: ‘Client requested master to start replication from impossible position’, Error_code: 1236
出現這種錯誤一般是主從服務器失去連接,出現了宕機的情況。
解決辦法:重新查詢主服務器的狀態,獲取position位置,重新設置從服務器的同步信息。
設置命令為:change master to master_log_file=‘獲取到的log文件’,master_log_pos=獲取到的pos;
五、錯誤類型1593
中繼日志錯誤,一般是服務器宕機引起,解決方案同錯誤處理四;
在msql 5.5以上版本,可在從服務機的配置文件my.cnf里要增加一個參數relay_log_recovery=1。