docker mysql主从配置

docker mysql主从配置_第1张图片
平手友梨奈

环境准备

云服务器或虚拟机2台或者启动2个容器
docker安装并启动,获取mysql镜像
可查考![http://www.runoob.com/docker]

文件挂载

挂载配置文件,数据文件,日志文件
位置自定

#创建文件夹
mkdir /usr/local/docker/mysql/conf
mkdir /usr/local/docker/mysql/data
mkdir /usr/local/docker/mysql/logs

主数据库my.cnf配置文件

# 字符集 
[mysql]
default-character-set=utf8

[mysql_safe]
default-character-set = utf8

[client]
default-character-set=utf8

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

# 字符集
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

symbolic-links=0

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

# 开启二进制日志
log-bin=mysql-bin
# 设置master,此值不能和从数据库的一样
server-id = 1
# 表示哪些库不同步,每个不同步的库写一行
binlog-ignore-db=mysql

# Custom config should go here
!includedir /etc/mysql/conf.d/

从数据库my.cnf配置文件



# 字符集 
[mysql]
default-character-set=utf8

[mysql_safe]
default-character-set = utf8

[client]
default-character-set=utf8

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

# 字符集
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

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

symbolic-links=0

# 设置master,此值不能和从数据库的一样
server-id = 2
# 表示哪些库不同步,每个不同步的库写一行
binlog-ignore-db=mysql

# Custom config should go here
!includedir /etc/mysql/conf.d/

设置时区(可选)

echo 'Asia/Shanghai' > /etc/timezone

初始启动容器

端口自定 命名自定

docker run -p 3306:3306 --privileged=true --name master-mysql -v /usr/local/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/docker/mysql/logs:/logs -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

-p 3307:3306:将容器的 3306 端口映射到主机的 3307 端口。

挂载时区
-e TZ=Asia/Shanghai 或 -v /etc/timezone:/etc/timezone

--privileged=true:(可移除)container容器内的root拥有真正的root权限

--name meteor-mysql :容器命名

-v $PWD/usr/local/docker/mysql/conf/:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。

-v $PWD/usr/docker/local/mysql/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。

-v $PWD/usr/docker/local/mysql/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。

-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

主数据库创建slave账户

登录主数据库mysql

#创建账户
create user 'slave'@'%' IDENTIFIED BY '123456'; 
#授予复制权限
grant replication slave on *.* to 'slave'@'%';
#刷新权限
flush privileges;

查询主数据库状态

 show master status;

记录File,Position值


开启从数据库同步

执行同步SQL语句

CHANGE MASTER TO 
Master_Host='IP地址',
Master_User='slave',
Master_Password='123456',
Master_Port=3307,
Master_Log_File='mysql-bin.000004',
Master_Log_POS=155;

启动同步进程

 start slave;

主从同步检查

show slave status;

清除同步

reset  slave all;

如果Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,表明成功了;如果不是,请自行google


image.png

测试

在Master服务器创建test数据库上创建一个表t_class;是否在Slave从服务器自动创建test数据库中自动创建t_class;

你可能感兴趣的:(docker mysql主从配置)