mysql5.7主库部署在10.0.31.41虚拟机上,从库部署在虚机的docker容器上
在centos7上部署mysql5.7自己解决
先配置一个账号权限用来做同步
grant replication slave on *.* to 'slave'@'%' identified by '123456';
查看账号权限
select user,host from mysql.user;
修改主数据库服务器的配置文件 my.cnf,开启 BINLOG,并设置 server-id的值
log-bin=mysql-bin
binlog_format=ROW
server-id=1
进入主库记下当前的二进制日志名和偏移量值(mysql-bin.000001,926728609)
mysql -uroot -p
show master status;
#+------------------+-----------+--------------+------------------+-------------------+
#| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
#+------------------+-----------+--------------+------------------+-------------------+
#| mysql-bin.000001 | 926728609 | | | |
#+------------------+-----------+--------------+------------------+-------------------+
#1 row in set (0.00 sec)
#从库使用docker启动一个 ,容器内部端口3306映射到宿主机3308
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
#修改从数据库的配置文件 mysqld.cnf,增加 server-id参数,需要先复制主库my.cnf,并修改名字
cp my.cnf mysqld.cnf
vim mysqld.cnf
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
lower_case_table_names=1
server_id = 3
#复制mysql配置文件到容器里 ,391e26dfcaf根据容器ID变换
docker cp mysqld.cnf 391e26dfcaf:/etc/mysql/mysql.conf.d
docker exec -it 391e26dfcaf bash
#设置账号权限,刷新权限或者重启mysql
mysql -uroot -p123456
grant select,insert,update,delete on *.* to 'test'@'%' identified by '123456';
flush privileges;
#授权,对从数据库服务器做相应设置,指定复制使用的用户,主数据库服务器的IP、端口以及开始执行复制的日志文件和位置
CHANGE MASTER TO
MASTER_HOST='10.0.31.41',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=926728609;
#从库上启动slave线程
start slave;
#查看slave 状态
show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#表示主从成功
#解决 Slave_SQL_Running: NO 问题(方案:数据库的备份)
#根据报错提醒,得知是主库和从库的数据不一致造成的,检查数据差距大不大
#全量备份
#先将主库的数据备份出来,然后再导入从库即可
mysqldump --all-databases -u root -p123456 -P 3306 > all.sql
#发送备份的数据库文件到容器内根目录下
docker cp all.sql 391e26dfcaf3:/
#从库停止slave
stop slave;
#导入数据库
mysql -uroot -p123456 <all.sql
start slave;