分布式數據庫之主從同步--master/slave


網上的資料已經挺多的了,但是學習過程中還是要記錄一下:

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;

[在這里插入圖片描述](https://img-blog.csdnimg.cn/20200921152853219.png?x-oss-

四、添加主從數據庫同步的用戶

點我查看如何添加用戶, 添加完之后要刷新權限。

五、修改從數據庫配置

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM