暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

docker安装mysql主从数据库

算法技术猿 2020-04-04
328

centos系统安装docker

使用下列命令卸载服务器上之前安装过的docker文件

$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

安装必需的包,yum-utils用于提供yum-config-manager插件,后面安装docker-ce版本时需要

$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

安装docker-ce稳定版本

$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

安装最新版本的docker引擎以及容器

$ sudo yum install docker-ce docker-ce-cli containerd.io

启动docker

$ sudo systemctl start docker

验证docker是否安装成功

$ sudo docker run hello-world

运行后输出如下内容,表示docker成功安装

安装主数据库mysql

通过docker下载MySQL镜像

$ docker pull mysql:5.7

查看已拉下来的mysql镜像

$ docker image ls | grep mysql

运行mysql镜像

$ docker run -p 3301:3306 --name master-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

  • -p:表示端口映射,在外部可以通过【ip:3301】链接master-mysql服务

  • –name:指定运行的容器名称为master-mysql

  • -e:传递环境参数,此处是将master-mysql的密码设置为123456

  • -d:表示后台运行查看运行的所有容器

$ docker container ls

通过dokcer logs
查看某个容器的运行日志

$ docker logs master-mysql

以终端的形式进入master-mysql容器内部

$ docker exec -it master-mysql /bin/bash

  • -i:让容器的标准输入保持打开

  • -t:让docker分配一个伪终端并绑定到容器的标准输入上

进入终端以后需要编辑mysql的配置文件my.cnf

$ vim /etc/mysql/my.cnf

然后发现master-mysql容器内,识别不了vim
命令:bash: vim: command not found
,因此需要在容器内部安装vim指令

更新apt-get为最新版本

$ apt-get update

安装vim

$ apt-get -y install vim

安装vim完成后,编辑mysql配置文件

$ vim /etc/mysql/my.cnf

编辑内容如下:

[mysqld]
server-id=1
log-bin=mysql-master-bin
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

重启MySQL服务

$ service mysql restart

重启完MySQL服务后,master-mysql容器会终止,需要重启master-mysql容器

$ docker start master-mysql

数据库用户创建与授权

创建用户用于主从数据同步,首先进入master-mysql容器,然后在进入数据库服务中,通过命令创建用户

# 进入mysql-master容器
$ docker exec -it master-mysql /bin/bash
# 进入mysql服务中,在-p后面输入密码,上面指定的密码-e MYSQL_ROOT_PASSWORD=123456
$ mysql -hlocalhost -uroot -p123456
# 创建用户usersync,密码:mastersync
$ create user 'usersync'@'%' identified by 'mastersync';
# 为用户usersync授权主从数据同步
$ grant replication slave,replication client on *.* to 'usersync'@'%';
# 查看是否创建成功用户
$ select user, host from mysql.user;
# 查看是否成功授权用户

$ show grants for 'usersync'@'%';

查看主库binlog日志文件和position

$ show master status;

记录下日志文件名称:mysql-master-bin.000001,postion:623;后续需要在slave中进行配置

查看容器mysql-master的独立ip,通过命令exit
退出mysql,exit容器内部,在容器外执行命令

$ docker inspect --format='{{.NetworkSettings.IPAddress}}' master-mysql

记录下ip地址,后续需要在slave中进行配置:172.18.0.2

安装从数据库mysql

步骤同安装从mysql数据库

# 启动mysql-slave容器,对应端口为3302 密码为slave

$ docker run -p 3302:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=slave -d mysql:5.7

# 进入容器

$ docker exec -it mysql-slave /bin/bash

# 安装vim工具
$ apt-get update
$ apt-get -y install vim
# 安装vim完成后,编辑mysql配置文件

$ vim /etc/mysql/my.cnf



my.cnf编辑内容如下,配置成只读

[mysqld]
server-id=2
log-bin=mysql-slave-bin
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

read_only=1



配置完成后,保存修改,然后重启服务

# 重启MySQL服务
$ service mysql restart
# 重启mysql-slave容器
$ docker start mysql-slave
# 进入mysql-slave容器
$ docker exec -it mysql-slave /bin/bash
# 进入mysql服务中,在-p后面输入密码,上面指定的密码-e MYSQL_ROOT_PASSWORD=slave

$ mysql -hlocalhost -uroot -pslave

链接master,设置数据同步的参数

# 链接主库

$ change master to master_host='172.18.0.2', master_user='usersync', master_password='mastersync', master_port=3306, master_log_file='mysql-master-bin.000001', master_log_pos=623, master_connect_retry=30;

# 查看salve状态, 此时状态:Slave_IO_Running: No, Slave_SQL_Running: No

$ show slave status \G;

# 开启主从复制
$ start slave;
# 在查看slave的Slave_IO_Running和Slave_SQL_Running状态,如果都是yes,则表示链接成功

$ show slave status \G;

验证主从是否安装成功

用navicat工具登录主库和从库,使用root账户登录,在主库中新建表,然后打开从库,查看是否也在从库中新建了表,如果在从库中新建了表,则表示主从数据库搭建成功。

连接mysql主库:

连接mysql从库:

在主库master中新建标test-db

刷新从库slave后,发现在slave库中也存在test-db库,即表示主从部署成功


文章转载自算法技术猿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论