docker mysql8.0 主从复制
docker mysql8.0 主从复制
基于mysql8.0 配置的主从复制,排除一些坑。
安装docker
ubuntu18 安装最新版docker
如果能访问此链接,就按教程走,否则自行百度:访问docker连接
成功后继续
- 更新索引包 :
sudo apt update
- 通过HTTPS使用仓库(repository)安装:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
- 添加Docker官方的GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 添加源:
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
- 安装:
sudo apt install docker-ce
- 查看是否启动:
systemctl status docker
- 需要配置镜像加速,否则拉取镜像会很慢,本人用的阿里镜像加速,自己去阿里云申请配置即可,免费的:
sudo vim /etc/docker/daemon.json
{ "registry-mirrors": ["××××××××××.mirror.aliyuncs.com"] }
配置主从复制
- 拉取镜像(目前我拉取的最新版本是8.0.19):
$ sudo docker pull mysql
- 查看进行:
sudo docker images
- 安装mysql-client,用于访问mysql容器数据库:
$ sudo apt install mysql-client-core-5.7
- 创建工作目录,保存mysql数据到本地:
cd ~/
mkdir docker-mysql
cd docker-mysql
mkdir -p mysql-master/data mysql-master/cnf mysql-slave1/data mysql-slave1/cnf
- 创建主从mysql配置文件:
vim mysql-master/cnf /my.cnf
~ 主mysql配置
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The MySQL Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# 主从配置服务期id
server_id = 1
# 开启日志文件
log-bin = mysql-bin
# 不参与主从的数据库名
binlog-ignore-db= mysql
# 需要进行 binlog 日志记录的数据库 `test`为你自己的数据库名称
binlog-do-db = test
# Custom config should go here
!includedir /etc/mysql/conf.d/
~ 从mysql 配置
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The MySQL Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# 主从配置服务期id
server_id = 2
# 开启日志文件
log-bin = mysql-bin
# 不参与主从的数据库名
binlog-ignore-db= mysql
# 需要进行 binlog 日志记录的数据库 `test`为你自己的数据库名称
binlog-do-db = test
# Custom config should go here
!includedir /etc/mysql/conf.d/
- 运行主myqsl容器(目录记得改成自己的):
run 运行一个容器
–name 后面是这个镜像的名称
-p 3307:3306 3307表示映射到本机的端口号,306表示在这个容器中使用的端口
-d 表示使用守护进程运行,即服务挂在后台
sudo docker run -di -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master -v /home/xiyeming/docker-mysql-data/mysql-master/data:/var/lib/mysql -v /home/xiyeming/docker-mysql-data/mysql-master/cnf/my.cnf:/etc/mysql/my.cnf -p 3307:3306 -d mysql
- 运行从myqsl容器(目录记得改成自己的):
sudo docker run -d -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave1 -v /home/xiyeming/docker-mysql-data/mysql-slave1/data:/var/lib/mysql -v /home/xiyeming/docker-mysql-data/mysql-slave1/cnf/my.cnf:/etc/mysql/my.cnf -p 3308:3306 mysql
- 连接容器数据库:
-h 连接的ip
–port 连接的端口
~ 主:
mysql -uroot -p123456 -h127.0.0.1 --port 3307
~ 从:
mysql -uroot -p123456 -h127.0.0.1 --port 3308
- 数据库库配置:
- 主库配置:
- 创建账号:
create user 'slave1'@'%' identified by 'slave1';
- 授权:
grant all privileges ON *.* TO 'slave1'@'%';
- 验证方式修改为上一版的:
ALTER USER slave1@'%' IDENTIFIED WITH mysql_native_password BY 'slave1';
- 刷新:
flush privileges;
- 查看状态
mysql> show master status;
- 从库配置
- master_log_file 对应File
master_log_pos对应Position change master to master_host='192.168.1.102',master_user='slave1',master_password='slave1',master_log_file='mysql-bin.000003',master_log_pos=1298,master_port=3307;
start slave;
show slave status \G
- 主从配置已完成,可以自己测试,在主库中写入数据,到从库中查看数据。
- 主库配置: