docker安装一主一从MySQL数据库步骤

2023-12-13 19:05:29

安装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;

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_49456013/article/details/134850109
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。