基于Docker的MySQL主主实践

基于Docker的MySQL主主实践

一、准备

1. 2台Linux CentOS 7 的服务器或者虚拟机

134.209.210.254
134.209.210.251

2. 在两台服务器上,安装docker

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce

# Step 4: 开启Docker服务
sudo systemctl start docker
sudo systemctl enable docker

3. 启动MySql 容器

## 在第一台服务器上运行
docker run -p 3306:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

## 在第二台服务器上运行
docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

使用Navicat尝试连接数据库
基于Docker的MySQL主主实践_第1张图片

二、配置第一台服务器的mysql

1. 进入mysql 容器

docker container ls 
docker exec -it mysql1 /bin/bash

2. 安装vim, 如果已经安装,则可以略过

apt-get update
apt-get install vim

3. 进入mysql 服务器之后,修改配置文件

cd /etc/mysql
vi my.cnf

## 增加以下配置内容

[mysqld] 
server_id = 1 
log-bin= mysql-bin
replicate-ignore-db=mysql 
replicate-ignore-db=sys 
replicate-ignore-db=information_schema 
replicate-ignore-db=performance_schema
read-only=0
relay_log=mysql-relay-bin
log-slave-updates=on
auto-increment-offset=1
auto-increment-increment=2

重启mysql服务

service mysql restart
docker container start mysql1

4. 创建一个用户

## 这个用户是用来同步数据的,重新进入容器,然后登陆mysql
docker exec -it mysql1 /bin/bash
mysql -uroot -p123456

## 这里表示创建一个slave同步账号slave,允许访问的IP地址为%,%表示通配符
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';

基于Docker的MySQL主主实践_第2张图片
在这里插入图片描述

5. 查看状态

## 记住File、Position的值,在另外一个服务器中将用到
show master status;

基于Docker的MySQL主主实践_第3张图片

6. 查看容器IP, 退出mysql

exit;
exit;
docker inspect mysql1 | grep IPA

基于Docker的MySQL主主实践_第4张图片

三、配置第二台mysql 服务器

1. 进入mysql 容器

## 进入mysql的容器 
docker exec -it mysql2 /bin/bash

## 安装vim, 如果已经安装,则可以略过
apt-get update
apt-get install vim

2. 进入mysql 服务器之后,修改配置文件

cd /etc/mysql 
vi my.cnf

## 增加如下配置

[mysqld] 
server_id = 2 
log-bin= mysql-bin
replicate-ignore-db=mysql 
replicate-ignore-db=sys 
replicate-ignore-db=information_schema 
replicate-ignore-db=performance_schema
read-only=0 
relay_log=mysql-relay-bin 
log-slave-updates=on 
auto-increment-offset=2 
auto-increment-increment=2

重启mysql 服务

service mysql restart 
docker start mysql2

3. 创建一个用户来同步数据

## 进入mysql2的docker 容器
docker exec -it mysql2 /bin/bash 
mysql -uroot -p123456

## 创建用户
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';

4. 设置主库链接

master_host即为容器IP,master_log_file和 master_log_pos即为在mone容器中,通过show master status查出来
的值;

change master to master_host='159.89.85.150',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=443,master_port=3306;

5. 启动同步

start slave ;

查看状态

show master status;

基于Docker的MySQL主主实践_第5张图片

查看容器IP:

docker inspect mysql1 | grep IPA

基于Docker的MySQL主主实践_第6张图片

四、设置第一台服务器的同步

1. 进入第一台服务器的mysql docker容器

docker exec -it mysql1 /bin/bash
mysql -uroot -p123456

2. 设置master to maser主库链接,参数详细说明同上

change master to master_host='157.245.134.29',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=443,master_port=3306;

3. 启动同步

start slave;

4. 查看状态

登陆台服务器,进入mysql的容器,运行以下命令, 如果Slave_SQL_Running 和 Slave_IO_Running 都为 Yes,那么MySQL的主主配置设置成功。

show slave status\G;

你可能感兴趣的:(MySql,Docker,docker,mysql,linux)