二进制日志(binary log)中记录了对MySQL数据库执行更改的所有操作,不包含select和show,主从同步主要是依赖该文件实现的。
docker容器==》mysql(没使用容器的可以越过第一步,自行准备两数据库)
1、docker run mysql
进入mysql : docker exec -it mysql /bin/sh
2、安装vim命令(如第三步中提示没有vim命令时执行,操作系统redhat:yum install -y vim,centos:apt-get install sudo)
如:
apt-get update
apt-get install vim
3、修改配置文件(进入数据库参考4.1,和数据库版本相关,查询文件位置:find / -name “*.cnf”,5.7在etc/my.cnf)
如:
vi /etc/mysql/mysql.conf.d/mysqld.cnf
3.1、在[mysqld]下添加(开启binlog日志,并且设置需要开启的库test)
server-id=1
log_bin=master-bin
log_bin_index=master-bin.index
binlog_do_db=test #需要同步的数据库
4、 在主数据库创建(从服务器的)用户,并赋予同步权限
4.1、进入mysql数据库(-u后面用户名,-p后面密码)
mysql -uroot -p123456
4.2、#创建从数据库的masterbackup用户和权限(192.168.17.%为从数据库ip,123456为从库密码)
grant replication slave on *.* to masterbackup@'192.168.17.%' identified by '123456';
4.3、#退出mysql
exit;
4.5、重启mysql(docker 容器可用docker restart mysql)
service mysql restart
4.6、(重启后重新进)
查看主服务器状态
show master status;
(注意此时的File和pos,主库文件名和偏移量,即从哪开始同步)
5、进入从数据库
修改配置(参考第三步)(配置完重启mysql)
server-id=2
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
6、进入从数据库
mysql -uroot -p123456
7、连接主数据库(设置主库文件名和偏移量)
(192.168.17.130为主数据库的ip,
master_log_file,master_log_pos为show master status查询出来的file和pos,
master_user为主数据库创建用户的username,
master_password为密码)
change master to master_host= '192.168.17.130', master_port=3306,
master_user='masterbackup', master_password='123456',
master_log_file='master-bin.000001',master_log_pos=154;
8、 启动slave数据同步(此时会开启两个线程,io_thread1:和主库进行连接,接收主库发送的数据,写到本地文件,称为中转日志;sql_thread2:读取中转日志,执行binlog)
#启动slave数据同步
mysql> start slave;
(#停止slave数据同步(若有需要)
mysql> stop slave)
9、 查看slave信息(以下两个running都为yes为主从同步成功)
mysql> show slave status\G;
Slave_IO_Running: yes
Slave_SQL_Running: Yes
10、忽略同步错误,继续同步(当主从数据不一致导致错误,可以先手动同步同步在重启slave服务或重新指定pos,参考第7步骤)
从库:
stop slave;
set global sql_slave_skip_counter =1;
start slave;