mysql 的安装配置,日志分类配置不在赘述,想要了解可参考之前博客
默认已安装两个相同版本数据库
主从复制
- master 把日志写入Binary log 二进制文件
- slave 监控binlog 日志有新的变化时,从binlog 读取日志,写入到 relay log 中继日志中
- 从库从中继日志读取变化,同步数据
导出数据
从主库导出数据到从库,保证初始状态时两个数据库数据一致。没有数据可忽略
mysqldump -uroot -p -h127.0.0.1 --flush-logs --master-data=2 --routines --triggers --events --single-transaction --databases ikang_db_01 > master_backup.sql
导出失败,配置 binlog后再试
主库配置
vim /etc/my.cnf
- 慢查询配置
# 慢查询开关
slow_query_log=ON
# 慢查询日志
slow_query_log_file=/var/lib/mysql/slow/slow.log
# 慢查询时间
slow_launch_time=4
long_query_time=3
- binlog 配置
server_id=200
log_bin=/var/lib/mysql/ikang_binlog # 日志前缀
binlog_format=row
expire_logs_days=3
max_binlog_size=200m
- 主库同步配置
# 不同步数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 需要同步数据库
binlog-do-db=ikang_db_01
- 主给从授权
mysql> use mysql;
mysql> grant replication slave on *.* to 'guanzc'@'192.168.56.*' identified by '123456';
# 如果出现错误:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
# 执行sql
# set global validate_password_policy=LOW;
# set global validate_password_length=6;
mysql> flush privileges;
- 当前binglog 日志
mysql> show master status;
+---------------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------------+----------+--------------+--------------------------+-------------------+
| ikang_binlog.000003 | 154 | ikang_db_01 | mysql,information_schema | |
+---------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)
从库配置
- 慢查询配置
# 慢查询开关
slow_query_log=ON
slow_query_log_file=/var/lib/mysql/slow.log
slow_launch_time=4
long_query_time=3
- relay配置
server_id=214
relay_log=/var/lib/mysql/relay-bin
#确保完整性
relay_log_recovery=1
#从服务器只读
read_only=on
# 关闭自动链路复制,手动启动
skip_slave_start=on
# 将主从服务的信息保存进表
master_info_repository=TABLE
relay_log_info_repository=TABLE
- 从库表同步配置
# 复制哪些数据库
replicate-do-db=ikang_db
# 不同步数据库
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
- 初始同步主数据
没有初始数据可忽略
mysql> source master_backup.sql
- 配置同步信息
mysql>change master to master_host='192.168.56.132',
master_port=3306,
master_user='guanzc',
master_password='123456',
master_log_file='ikang_binlog.000003',
master_log_pos=154;
master_log_file
主库当前使用binlog 日志
- 删除从库主键策略
主从数据库主键策略一定不能一样
rm -rf /var/lib/mysql/auto.cnf
- 启动
mysql> start slave;
# 停止
mysql> stop slave;
- 查看从库状态
mysql> show slave status;
测试
- 主库新增记录
mysql> insert into user_info values(1, 'test1', '123123');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql>
mysql> select * from user_info;
+------+----------+----------+
| id | username | password |
+------+----------+----------+
| 1 | guanzc | 123456 |
| 2 | ikang | 123456 |
| 1 | test1 | 123123 |
+------+----------+----------+
3 rows in set (0.00 sec)
- 从库自动同步
mysql> select * from user_info;
+------+----------+----------+
| id | username | password |
+------+----------+----------+
| 1 | guanzc | 123456 |
| 2 | ikang | 123456 |
| 1 | test1 | 123123 |
+------+----------+----------+
3 rows in set (0.00 sec)
mysql>
问题
遇到了主库新增记录,没有同步到从库,发现是权限问题,主库是guanzc
用户, 从库没有给 guanzc
用户授权
mysql> grant all privileges on ikang_db_01.* to 'guanzc'@'%';
mysql> flush privileges;