拉取mysql5.7镜像
docker pull mysql:5.7
启动mysql-master实例3406
执行命令docker run -p 3406:3306 --name mysql_m -v /usr/local/zl/tools/mysql_data/mysql_m/log:/var/log/mysql -v /usr/local/zl/tools/mysql_data/mysql_m/data:/var/lib/mysql -v /usr/local/zl/tools/mysql_data/mysql_m/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
配置master
在/usr/local/zl/tools/mysql_data/mysql_m/conf目录下创建my.cnf文件(需要在自己配置的容器卷路径创建该文件)
文件内容为:
[mysqld]
##设置server_id,同一局域网内唯一
server_id=101
##指定不需要同步的数据库的名称
binlog-ignore-db=mysql
##开启二进制日志功能
log-bin=mall-mysql-bin
##设置二进制日志使用内存的大小
binlog_cache_size=1M
##设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
##二进制日志过期清理时间,0表示不清理
expire_logs_days=7
##跳过主从复制中遇到的所有错误或者指定类型的错误,避免slave端复制中断,如1062错误是指主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
重启mysql_m实例
docker restart mysql_m
创建主从同步账户
进入mysql_m容器:docker exec -it mysql-m /bin/bash,登录mysql:mysql -u root -p 输入密码:root
创建slave用户:create user 'slave'@'%' identified by '123456';
赋予slave用户权限:grant replication slave,replication client on . to 'slave'@'%'
启动从数据实例mysql_s
执行命令
docker run -p 3407:3306 --name mysql_s -v /usr/local/zl/tools/mysql_data/mysql_s/log:/var/log/mysql -v /usr/local/zl/tools/mysql_data/mysql_s/data:/var/lib/mysql -v /usr/local/zl/tools/mysql_data/mysql_s/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
配置mysql_s实例的配置文件
在/usr/local/zl/tools/mysql_data/mysql_s/conf目录下创建my.cnf,文件内容为
[mysqld]
##server_id,同一局域网内唯一
server_id=102
##不需要同步的数据库
binlog-ignore-db=mysql
##开启二进制日志功能,以备slave作为其他数据库实例的master时使用
log-bin=mall-mysq-slave1-bin
##设置二进制日志使用内容大小
binlog_cache_size=1M
##二进制日志格式
binlog_format=mixed
##二进制日志过期清理时间,默认为0,表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有的错误或指定类型的信息
slave_skip_errors=1062
##relay_log配置中继日志
relay_log=mall-mysql-relay-bin
##log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
##slave设置为只读(具有super权限的用户除外)
read_only=1
重启mysql_s实例
docker restart mysql_s
在主数据库中查看主从同步状态
在mysql_m的容器内部执行show master status;
进入msyql_s容器
docker exec -it mysql_s /bin/bash进入容器,执行msyql -u root -p 输入密码root
在从数据库中配置主从复制
执行命令:change master to master_host='10.201.56.79',master_user='slave', master_password='123456', master_port=3406, master_log_file='mall-mysql-bin.000001' , master_log_pos=617, master_connect_retry=30;
从数据库中查看主从同步的状态
执行命令:show slave status \G;
可以发现
Slave_IO_Running: No
Slave_SQL_Running: No
为No表示还没有开始
从数据库开启主从同步
在从数据库实例中执行start slave,再次执行show slave status \G;查看主从同步状态,发现Slave_IO_Running和Slave_SQL_Running变为了yes,说明开始复制工作
主从复制测试
登录mysql_m执行命令:
create database db1;
use db1;
create table t1(id int,name varchar(20));
insert into t1 values(1,'zhangsan');
在主机上查看表t1的内容,查到数据表明主库写入数据成功
登录msyql_s查看是否同步了主库mysql_m的数据,可以看到db1数据库已经同步,表t1的数据也已经同步
至此说明主从数据库搭建成功