docker安装一主一从MySQL数据库步骤
安装MySQL主从复制
①宿主机创建以下目录
/mydata/mysql-master/log 命令:mkdir -p /mydata/mysql-master/log
/mydata/mysql-master/data 命令:mkdir -p /mydata/mysql-master/data
/mydata/mysql-master/conf 命令:mkdir -p /mydata/mysql-master/conf
/mydata/mysql-slave/log 命令:mkdir -p /mydata/mysql-slave/log
/mydata/mysql-slave/data 命令:mkdir -p /mydata/mysql-slave/data
/mydata/mysql-slave/conf 命令:mkdir -p /mydata/mysql-slave/conf
②启动主MySQL
docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
③/mydata/mysql-master/conf目录下创建my.cnf
cd /mydata/mysql-master/conf
vim my.cnf
my.cnf
[mysqld]
## 设置 server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog_ignore_db=mysql
## 开启二进制日志功能
log_bin=mall-mysgl- bin
## 设置二进制日志使用内存大小 (事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式 (mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如: 1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
④修改完配置,重启master实列
docker restart mysql-master
⑤进入容器验证mysql是否可用(依次执行下面语句)
docker exec -it mysql-master /bin/bash
mysql -uroot -p
show databases;
⑥创建数据同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';//创建用户
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%' ;//授权
⑦创建从数据库实列
docker run -p 3308:3306 --name mysql-slave -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
⑧/mydata/mysql-slave/conf目录下创建my.cnf
cd /mydata/mysql-slave/conf
vim my.cnf
my.cnf
[mysqld]
## 设置server id ,同局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog_ignore_db=mysql
## 开启二进制日志功能,以备 Slave作为其它数据库实例的Master时使用
log_bin=mall- mysql- slave1- bin
## 设置二进制日志使用内存大小 (事务 )
binlog_cache_size=1M
## 设置使用的二进制日志格式 (mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如 : 1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
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
⑨重启从数据库实列
docker restart mysql-slave
如果启动有问题的话,可以通过docker logs mysql-master 来查看日志,找到报错问题。
⑩在主数据库中查看主从同步状态(在主数据库容器内部执行下面语句)
show master status;
11.进入从数据库容器
docker exec -it mysql-slave /bin/bash
mysql -uroot -p
12.在从数据库中配置主从复制
change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
13.在从数据库中查看主从同步状态
show slave status\G;
14.在从数据库中开启主从同步
start slave;
15.查看是否已经同步
show slave status\G;
报错:Slave_IO_Running: No Could not find first log file name in binary log index file’
解决方案:
在主数据库中执行flush logs;
进去从数据库,停掉stop slave; 执行CHANGE MASTER TO MASTER_LOG_FILE=‘mall-mysgl- bin.000002’,MASTER_LOG_POS=154;执行start slave;执行show slave status\G;
16.测试
在主数据库中创建表插入数据
create database db01;
use db01;
create table t1(id int , name varchar(20));
insert into t1 values(1,'zs');
select * from t1;
在从数据库执行
use db01;
select * from t1;
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!