slave_IO
线程复制master服务器中的SQL语句到本机的relay_log文件中slave_SQL
线程执行relay_log文件中的SQL语句达到同步数据的效果由于只有一台服务器,我们使用docker来搭建mysql主从同步,docker的部署与实际环境是一样的
镜像:mysql:5.7
下载镜像
docker pull mysql:5.7
使用docker-compose启动两个数据库
version: "3.7"
services:
mysql1:
image: mysql:5.7
container_name: mysql1
environment:
- MYSQL_ROOT_PASSWORD=wordpress
volumes:
- ~/mysql1/date:/var/lib/mysql:rw
- ~/mysql1/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf:rw
mysql2:
image: mysql:5.7
container_name: mysql2
environment:
- MYSQL_ROOT_PASSWORD=wordpress
volumes:
- ~/mysql2/date:/var/lib/mysql:rw
- ~/mysql2/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf:rw
创建挂载目录与准备配置文件
mkdir -p mysql1/date
mkdir -p mysql2/date
cp my.conf mysql1/
cp my.conf mysql2/
备注:如果my.conf是从其他主机down下来的文件,清删除指定pid和指定日志的配置,不然会报错,也可以启动一个mysql容器后从容器中复制配置文件
启动docker-compose
docker-compose -f mysql.yml up -d
docker-compose -f mysql.yml ps
查看容器IP
docker inspect mysql1
docker inspect mysql2
容器规划
mysql1 主服务器 172.28.0.3
mysql2 从服务器 172.28.0.2
备份主数据库
mysql -h 172.28.0.3 -uroot -pwordpress -e 'create database test'
mysql -h 172.28.0.3 -uroot -pwordpress -e 'show database'
mysql -h 172.28.0.3 -uroot -pwordpress -e 'create table test.test(name char(15),hostip char(15))default charset=utf8'
mysql -h 172.28.0.3 -uroot -pwordpress -e "insert into test.test values('mysql1','172.28.0.3')"
mysql -h 172.28.0.3 -uroot -pwordpress -e "select * from test.test"
mysqldump -h 172.28.0.3 -uroot -pwordpress -A >mysql.sql
导入数据库到mysql2
mysql -h 172.28.0.2 -uroot -pwordpress < mysql.sql
mysql -h 172.28.0.2 -uroot -pwordpress -e "select * from test.test"
备注:配置主从同步前两台数据库的数据需要一致
主服务器mysql1开启binglog日志(修改配置文件)
[mysqld]
server_id=50 #id唯一,0到255之间
log_bin=日志名 #启用binlog日志,并指定日志名
max_binlog_size=XXm #指定binlog日志大小
重启mysql1
docker restart mysql1
创建同步用户
mysql>create user xiaosan@"%" identified by 'Abc123...';
mysql>grant replication slave on *.* to xiaosan@'%';
mysql>show master status;
从服务器mysql2配置
[mysqld]
service_id=51
重启容器
docker restart mysql2
从服务器指定主服务器
mysql>change master to
->master_host='172.28.0.3', #指定主服务器IP
->master_user='xiaosan', #主服务器授权用户
->master_password='Abc123...', #主服务器授权用户密码
->master_log_file='c078f1f711e6-bin.000001', #主服务器binlog日志
->master_log_pos=593; #日志偏移量、
mysql>start slave; #启动salve进程
mysql>show slave status\G; #查看进程
备注: Slave_IO_Running: Yes
Slave_SQL_Running: Yes
yes时说明进程已开启
查看从服务器test库的test表
mysql -h 172.28.0.2 -uroot -pwordpress -e "select *from test.test"
主服务器mysql1写入数据
mysql -h 172.28.0.3 -uroot -pwordpress -e "insert into test.test values('mysql2','172.28.0.2')"
mysql2查看是否同步
mysql -h 172.28.0.2 -uroot -pwordpress -e "select *from test.test"
到这里主从同步就搭建好了