docker 安装mysql 主从,以及遇到的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quanwei132/article/details/84501281

实时查看docker容器日志

$ docker logs -f -t --tail 100 容器名

错误:Slave_IO_Running: No

原因是:

(1)是mysql的 master 和slave 数据存储 mysql/data/auto.cnf 文件中 server-uuid相同,要修改不相同

server-uuid=9a0a90a7-f091-11e8-a8ab-0242ac120004

(2)master_log_pos=3199  必须与主机一致, 日志位置,必须一致

(3)如果 两边的库与表不一致,如master 上有5个数据库,slave有4个数据库,  当master 上删除第5个数据库,那么slave报错

Slave_SQL_Running: No

并且 slave 关闭,不可用了,要重新创建

----1下载mysql 镜像

docker pull xiaochunping/mysql-master;

docker pull xiaochunping/mysql-slave;

-- 2cnetos docker run ,把my.cnf和data数据引入到属主机

-----------------

master配置文件/home/mysql/etc/master/master.cnf

slave配置文件/home/mysql/etc/slave/slave.cnf

mkdir -p /home/mysql/master-data

mkdir -p /home/mysql/slave-data

master/my.cnf

[mysqld]
##################基础设置##################
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
#log-error	= /var/log/mysql/error.log

# By default we only accept connections from localhost
#bind-address	= 127.0.0.1

#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id=1

#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4

#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci

#设置client连接mysql时的字符集,防止乱码
init_connect=‘SET NAMES utf8mb4‘

#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1

##################主从复制设置##################
#开启mysql binlog功能
log-bin=/var/log/mysql/mysql-bin.index

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

slave/my.cnf

[mysqld]
##################基础设置##################
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
#log-error	= /var/log/mysql/error.log

# By default we only accept connections from localhost
#bind-address	= 127.0.0.1

#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id=2

#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4

#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci

#设置client连接mysql时的字符集,防止乱码
init_connect=‘SET NAMES utf8mb4‘

#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1

##################主从复制设置##################
#开启mysql binlog功能
log-bin=/var/log/mysql/mysql-bin.index

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

3 启动

docker run \

--name mysql-master \

--privileged=true \

-v /home/mysql/etc/master:/etc/mysql/conf.d \

-v /home/mysql/master-data:/var/lib/mysql \

-p 3306:3306 \

-e MYSQL_ROOT_PASSWORD=root \

-d xiaochunping/mysql-master

docker run \

--name mysql-slave \

--privileged=true \

-v /home/mysql/etc/slave:/etc/mysql/conf.d \

-v /home/mysql/slave-data:/var/lib/mysql \

-p 3307:3306 --link mysql-master:master \

-e MYSQL_ROOT_PASSWORD=root \

-d xiaochunping/mysql-slave

-----------------

-- 3.2快速启动

docker run --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d xiaochunping/mysql-master

docker run --name mysql-slave -p 3307:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORD=root -d xiaochunping/mysql-slave

-----------------

3.3// 如果授权给*就不需要查看ip

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master【查看主IP】

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-slave【查看从IP】

4 .1登入主容器

docker exec -it mysql-master /bin/bash

4.2登入主数据库

mysql -uroot -proot

grant replication slave on *.* to 'test'@'%' identified by '123456';

flush privileges;

// 查看主的状态

show master status;

5.1登入从容器

docker exec -it mysql-slave /bin/bash

5.2登入从数据库

mysql -uroot -proot

5.3 设置matser 日志记录File和Position对应的值

change master to master_host='master', master_user='test', master_password='123456', \

master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=3199, master_connect_retry=30;

5.4 启动slave 

start slave;

5.5查看从的状态

show slave status\G

猜你喜欢

转载自blog.csdn.net/quanwei132/article/details/84501281
今日推荐