一、準備環境:(一主一從)
數據庫 | ip |
主庫 | 192.168.87.133 |
從庫 | 192.168.87.134 |
1.1 兩臺虛擬機均安裝MySQL5.7。(mysqladmin --version)
參考:
- Linux Centos7.5 安裝MySQL5.7
- mysql 5.7連接不上:Host '192.168.87.1' is not allowed to connect to this MysQL server
- Mysql--Host 'xxx' is blocked because of many connection errors;unblock with 'mysqladmin flush-hosts'
1.2成功安裝後,創建兩個數據庫。
數據庫腳本:
(1)創建數據庫
#創建數據庫user_db
CREATE DATABASE `user_db` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
(2)在user_db中創建t_user表
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`user_id` bigint(20) NOT NULL COMMENT '用戶id',
`fullname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用戶姓名',
`user_type` char(1) DEFAULT NULL COMMENT '用戶類型',
PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
2.配置
2.1主庫配置:
vim /etc/my.cnf
注意:(錯誤配置)
網上很多博客是如下這麼配置的。我剛開始也是這麼配置的,配置完畢,重啓mysql是啓動不了。
[mysqld]
#開啓日誌
log‐bin = mysql‐bin
#設置服務id,主從不能一致
server‐id = 1
#設置需要同步的數據庫
binlog‐do‐db=user_db
#屏蔽系統庫同步
binlog‐ignore‐db=mysql
binlog‐ignore‐db=information_schema
binlog‐ignore‐db=performance_schema
提示使用systemctl status mysqld.service和journalctl -xe查看錯誤信息;
並且使用命令:cat /var/log/mysqld.log 查看mysql日誌,會報如下類似錯誤:
2019-12-25T13:34:26.236167Z 0 [ERROR] unknown variable 'binlog‐do‐db=user_db'
2019-12-25T13:34:26.236192Z 0 [ERROR] Aborting
正確配置(完整配置):(不是使用-,而改用_)
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
validate_password=off
max_connect_errors=1000
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
##################主從配置的新增部分
#開啓日誌文件
log_bin=mysql-bin
#設置服務id,主從不能一致
server_id=1
#設置需要同步的數據庫
binlog_do_db=user_db
##屏蔽系統庫同步
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
按照正確配置完後,重啓mysql服務;使用命令:systemctl restart mysqld
2.2從庫配置:(完整配置)
[mysqld]
validate_password=off
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#開啓日誌
log_bin=mysql‐bin
#設置服務id,主從不能一致
server_id=2
#設置需要同步的數據庫
replicate_wild_do_table=user_db.%
#屏蔽系統庫同步
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
按照正確配置完後,重啓mysql服務;使用命令:systemctl restart mysqld
2.3 查看log_bin是否成功開啓 (主、從庫都可查詢下)
3.創建用於複製的用戶(主庫)
#切換至主庫bin目錄,登錄主庫,輸入密碼
mysql ‐uroot ‐p
#授權主備複製專用賬號
grant replication slave on *.* to 'slave'@'%' identified by '123456';
#刷新權限
FLUSH PRIVILEGES;
#確認位點 記錄下文件名以及位點
show master status;
截圖: (用命令show master status;查出的東西,後面從庫配置需要用到)
4.設置從庫向主庫同步數據、並檢查鏈路
#切換至從庫bin目錄,登錄從庫(輸入密碼)
mysql ‐uroot ‐p
#先停止同步
STOP SLAVE;
#修改從庫指向到主庫,使用上一步記錄的文件名以及位點
CHANGE MASTER TO
master_host = '192.168.87.133',
master_user = 'slave',
master_password = '123456',
master_log_file = 'mysql-bin.000009',
master_log_pos = 582;
#啓動同步
START SLAVE;
#查看從庫狀態Slave_IO_Runing和Slave_SQL_Runing都爲Yes說明同步成功,如果不爲Yes,請檢error_log,#然後排查相關異常。
show slave status\G
######(一般不需要執行)注意: 如果之前此備庫已有主庫指向 需要先執行以下命令清空#########
STOP SLAVE IO_THREAD FOR CHANNEL '';
reset slave all;
ps:
master_host | master主節點:ip地址 |
master_user | master主節點:主節點創建的用於複製的賬號 |
master_password | master主節點:主節點創建的用於複製的密碼 |
master_log_file | master主節點:sql命令show master status查詢出來的file字段的值 |
master_log_pos | master主節點:sql命令show master status查詢出來的Position字段的值 |
完整截圖:
ps:查看從庫狀態Slave_IO_Runing和Slave_SQL_Runing都爲Yes說明同步成功,如果不爲Yes,請檢查error_log,然後 排查相關異常。
5.測試:
在主庫(192.168.87.133)中t_user表中插入一條數據;然後刷新從庫t_user表,查看是否同步過來了數據。
5.1主庫:t_user
5.2從庫:t_user (刷新表)