Docker搭建mysql8的主从复制

查看镜像

docker images


### 主节点的配置


创建数据存储目录



mkdir -p /docker/mysql/master/data


创建日志目录



mkdir -p /docker/mysql/master/logs


创建配置文件目录



mkdir -p /docker/mysql/master/conf


进行快速启动 - 查看镜像是否有问题  
 注:不同的版本的配置文件位置不同,可通过快速创建,查看mysql的对应的配置文件位置,进行对应映射。



快速启动

docker run -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.32

启动成功后,进入容器内部拷贝配置文件,到宿主主机

docker cp mysql8:/etc/mysql /docker/mysql/master/conf

删除刚才的容器,重新创建容器

docker stop mysql8
docker rm mysql8


运行容器



docker run -p 3340:3306 --name mysql_master --privileged=true
-v /docker/mysql/master/conf:/etc/mysql/conf.d
-v /docker/mysql/master/logs:/var/log/mysql
-v /docker/mysql/master/data:/var/lib/mysql
-v /etc/localtime:/etc/localtime
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.32 --init-connect=“SET collation_connection=utf8mb4_0900_ai_ci” --init-connect=“SET NAMES utf8mb4” --skip-character-set-client-handshake


进入容器



docker ps -a
docker exec -it mysql_master /bin/bash

打开MySQL,输入密码

mysql -uroot -p

查看数据库

show databases;

创建数据库

create database 数据库;


配置远程连接(对外连接的)



在MySQL下执行

use mysql;

创建对外访问的用户和权限

CREATE USER ‘用户名’@‘%’ IDENTIFIED BY ‘密码’;
GRANT ALL ON *.* TO ‘用户名’@‘%’ WITH GRANT OPTION;
FLUSH PRIVILEGES;

退出

exit


创建自定义的配置文件



cd /docker/mysql/master/conf
touch my.cnf


my.cnf文件内容:



[client]

mysql客户端默认字符集

default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]

跳过密码登录

#skip-grant-tables
#bind-address = 127.0.0.1
init_connect=‘SET collation_connection = utf8mb4_general_ci’
init_connect=‘SET NAMES utf8mb4’

mysql服务端默认字符集

character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake

datadir=/var/lib/mysql

主服务器唯一ID

server-id=1

设置不要复制的数据库

binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

设置需要复制的数据库(先创建好)

binlog-do-db=数据库名

启用二进制日志,日志的存放地址

log-bin=/var/lib/mysql/mysql-bin

主机,1 只读 0 读写(默认是0)

read-only=0

设置logbin格式 有3种格式

默认 STATEMENT(函数支持不好) 默认的 ROW(行模式大量修改效率不行,但支持存储引擎) MIXED (综合,推荐)

binlog_format=mixed

跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

二进制日志过期清理时间,默认是0(不自动清理)

expire_logs_days=7

单个二进制日志大小

max_binlog_size=200M

设置每隔多少次事务提交操作,将这些操作写入二进制日志文件

sync_binlog=1

使用mysql_native_password插件的认证

default_authentication_plugin=mysql_native_password


重启mysql容器



docker ps -a
docker restart 容器id


#### **创建用户并授权给从机**


主机创建用户:



连接上Mysql服务,执行

create user ‘用户名’@‘%’ identified by ‘密码’;
grant replication slave ON *.* TO ‘用户名’@‘%’;
alter user ‘用户名’@‘%’ identified with mysql_native_password by ‘密码’;


查询主机的状态:



show master status;

执行上面命令,得到 File(binlog日志) Position(接入点) Binlog_Do_DB(要复制的数据库) Binlog_IgnoreDB()

需要记录一下File、Position


### 从节点配置


创建数据目录



mkdir -p /docker/mysql/slave/data


创建日志目录



mkdir -p /docker/mysql/slave/logs


创建配置文件目录



mkdir -p /docker/mysql/slave/conf


创建自定义的配置文件



cd /docker/mysql/slave/conf
touch my.cnf


mysql.cnf文件内容:



[client]

mysql客户端默认字符集

default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]

跳过密码登录

#skip-grant-tables
#bind-address = 127.0.0.1
init_connect=‘SET collation_connection = utf8mb4_general_ci’
init_connect=‘SET NAMES utf8mb4’

mysql服务端默认字符集

character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake

datadir=/var/lib/mysql

从服务器唯一ID

server-id = 2

开启中继日志

relay-log=mysql-relay

从机,1 只读 0 读写(默认是0)

read-only=1

启用二进制日志,日志的存放地址,如果从机变成主机可以继续使用bin日志

log-bin=mysql-slave-bin

使用mysql_native_password插件的认证

default_authentiction_plugin=mysql_native_password


运行容器



docker run -p 3341:3306 --name mysql_slave --privileged=true
-v /docker/mysql/slave/conf:/etc/mysql/conf.d
-v /docker/mysql/slave/logs:/var/log/mysql
-v /docker/mysql/slave/data:/var/lib/mysql
-v /etc/localtime:/etc/localtime
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.32 --init-connect=“SET collation_connection=utf8mb4_0900_ai_ci” --init-connect=“SET NAMES utf8mb4” --skip-character-set-client-handshake


进入容器



docker ps -a
docker exec -it mysql_slave /bin/bash


配置远程连接(对外连接的)



打开MySQL,输入密码

mysql -uroot -p

查看数据库

show databases;

创建数据库

create database 数据库;

查看数据库

在MySQL下执行

use mysql;

创建对外访问的用户和权限

CREATE USER ‘用户名’@‘%’ IDENTIFIED BY ‘密码’;
GRANT ALL ON *.* TO ‘用户名’@‘%’ WITH GRANT OPTION;
FLUSH PRIVILEGES;

退出

exit


#### 设置同步信息



停止同步(之前配置过,需要执行)

stop slave;

设置同步

CHANGE MASTER TO MASTER_HOST=‘主机IP地址’,
MASTER_PORT=端口,
MASTER_USER=‘主机用户’,MASTER_PASSWORD=‘主机用户的密码’,
MASTER_LOG_FILE=‘binlog日志名字’,
MASTER_CONNECT_RETRY=30,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值