安装dockers 参考 https://www.cnblogs.com/xiufengchen/p/10387055.html
docker 部署MySQL主从 参考 https://blog.csdn.net/ClassmateLin/article/details/100512910
安装docker
一 docker安装:
1 首先需要检查linux内核的版本,docker要求linux内核是在3.10之上的,
1 |
|
2 更新yum源,注意这步应该是管理员权限,如果当前不是管理员,切换至管理员登录,在更新过程需要输入 y 确认
sudo yum update
3 卸载旧版本的docker
sudo yum remove docker docker-common docker-selinux docker-engine
4 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5 设置yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
以上三个命令执行的结果
6 可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
7 安装docker ,一下命令只需要执行一个就可以了.
sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0 sudo yum install# 例如:sudo yum install docker-ce-17.12.0.ce
8 启动并加入开机启动
sudo systemctl start docker sudo systemctl enable docker
9 查看docker的版本
docker version
docker 部署mysql 主从
获取Mysql镜像
网易蜂巢镜像:
拉取镜像:
docker pull hub.c.163.com/library/mysql:latest
查看镜像:docker images
创建文件夹和配置文件
mkdir -p /docker/mysql/{master,slave}/data
添加主库配置文件: vim /docker/mysql/master/my.cnf
[mysqld]
user=mysql
log-bin=mysql-bin
server-id=1
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password
table_definition_cache=400
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
添加从库配置文件:sudo vim /docker/mysql/slave/my.cnf
[mysqld]
user=mysql
server-id=2
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password
table_definition_cache=400
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
创建Mysql桥接网络,用于主从容器直接互联:
docker network create mysql
创建Mysql主库容器:
docker run -d --privileged=true -p 3307:3306 -v /docker/mysql/master/my.cnf:/etc/mysql/my.cnf -v /docker/mysql/master/data:/var/lib/mysql -v /docker/mysql/master/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master --network mysql --network-alias mysql-master mysql
创建Mysql从库容器:
docker run -d --privileged=true -p 3308:3306 -v /docker/mysql/slave/my.cnf:/etc/mysql/my.cnf -v /docker/mysql/slave1/data:/var/lib/mysql -v /docker/mysql/slave/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave --network mysql --network-alias mysql-slave mysql
配置Mysql主从复制
配置主服务器:
docker exec -it mysql-master bash
mysql -u root -p
密码是上面docker命令中MYSQL_ROOT_PASSWORD中设置的。
# 这里使用root用户进行主从复制, %为允许所有ip进行复制。
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';
# 刷新权限
flush privileges;
# 查看主服务器状态
show master status;
#需要记录其中的File, Position字段内容
exit; # 退出mysql
exit; # 退出容器
这里开启主库远程访问权限,如果从库远程连接也同理
命令:use mysql;
命令:select host,user from user;
命令:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
命令:flush privileges;
配置从服务器:
docker ps
docker exec -it mysql-slave bash
mysql -u root -p 密码是上面docker命令中 MYSQL_ROOT_PASSWORD中设置的
#输入以下内容
change master to master_host='mysql-master',master_user='root',master_password='root密码',master_log_file='刚才记住的File列的内容',master_log_pos=position的内容(不用加引号),master_port=3306;
# 例如
change master to master_host='mysql-master',master_user='root',master_password='123456',master_log_file='mysql-bin.000005',master_log_pos=502,master_port=3306;
# 启动slave
start slave;
# 查看slave状态
show slave status\G;
当Slave_IO_Running和Slave SQL Ruing都是Yes时,说明配置成功了,
测试主从复制
进入主库:docker exec -it mysql-master bash和mysql -u root -p
创建数据库和表,添加测试数据:
创建数据库
create database goods;
进入数据库
use goods;
查看当前数据库
select database();
查看当前数据库里面的表
show tables;
创建test表
create table test(
id int,
city varchar(255));
向表中插入数据
insert into test values (1,'beijing'),(2,'shanghai');
查看表里的数据
select * from test;
进入从库:
docker exec -it mysql-slave bash 和 mysql -u root -p
验证数据是否同步:
show databases;
use goods;
show tables;
select * from test;
mysql 主从库配置完成
但是发现一个问题
在从库上操作增删改 的数据,主库不跟着变动
主库 上操作增删改 的数据 ,从库跟着变动