基于docker的mysql主从复制
一、下载官方的mysql镜像,我用的https://dashboard.daocloud.io/orgs/zuikc/packages/explore国内的加速镜像,一般国外的比较慢
1. 在 terminal 中登录 docker login daocloud.io 2. 输入 docker pull 并复制粘贴以下镜像地址 daocloud.io/library/mysql:latest
下载完成后查看镜像:
二、生成容器
生成容器时,调用的启动脚本是/entrypoint.sh;通过查看/entrypoint.sh脚本内容,总结参数如下
mysqld #启动mysql服务,必须使用
MYSQL_ROOT_PASSWORD #设置mysql的root密码,必须使用
#以下二个参数添加除root之外的用户并设置密码,可选。
MYSQL_USER
MYSQL_PASSWORD
#设置生成容器时需要新建的数据库,可选
MYSQL_DATABASE
#容器的mysql数据库默认的保存路径是:
/var/lib/mysql
#容器的配置文件my.cnf的路径为:
/etc/mysql/my.cnf
使用上要的参数生成新的容器:
docker run -d -p 3307:3306 --name mysql -P -e mysqld -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_USER=yope -e MYSQL_PASSWORD=yope -e MYSQL_DATABASE=testDb -v /mysql_data:/var/lib/mysql daocloud.io/library/mysql
查看容器:
docker ps -a
重要参数说明:
--name mysql
指定容器名称为 mysql;
-p 3307:3306
指定映射端口 将宿主机端口3307映射到容器3306端口;
-v /mysql_data:/var/lib/mysql
映射数据库存放位置。将宿主机的目录“/mysql_data”映射到容器的“/var/lib/mysql”目录;这是因为默认情况下数据库的数据库文件和日志文件都会存放于容器的AUFS文件层,这不仅不使得容器变得越来越臃肿,不便于迁移、备份等管理,而且数据库的性能也会受到影响。因此建议挂载到宿主机的目录到容器内。
查看本地的mysql_data是否生成容器内的数据库:
[root@localhost /]# ll /mysql_data/
总用量 188452
-rw-r----- 1 systemd-bus-proxy ssh_keys 56 8月 20 22:25 auto.cnf
-rw-r----- 1 systemd-bus-proxy ssh_keys 1329 8月 20 22:25 ib_buffer_pool
-rw-r----- 1 systemd-bus-proxy ssh_keys 79691776 8月 20 22:25 ibdata1
-rw-r----- 1 systemd-bus-proxy ssh_keys 50331648 8月 20 22:25 ib_logfile0
-rw-r----- 1 systemd-bus-proxy ssh_keys 50331648 8月 20 22:25 ib_logfile1
-rw-r----- 1 systemd-bus-proxy ssh_keys 12582912 8月 20 22:25 ibtmp1
drwxr-x--- 2 systemd-bus-proxy ssh_keys 4096 8月 20 22:25 mysql
drwxr-x--- 2 systemd-bus-proxy ssh_keys 8192 8月 20 22:25 performance_schema
drwxr-x--- 2 systemd-bus-proxy ssh_keys 8192 8月 20 22:25 sys
drwxr-x--- 2 systemd-bus-proxy ssh_keys 19 8月 20 22:25 testDb
[root@localhost /]#
已经生成相关的文件和默认数据库,同时也新建了"testDb"数据库.
测试:
在宿主机上通过端口访问容器中的mysql服务
测试登录:
mysql -u root -p123456 -h docker宿主机ip -P 3307
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.13 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
三、进入到新生成的容器 (名为mysql的容器)
使用exec进入容器,同时进行相关操作:
[root@localhost /]# docker exec -it mysql /bin/bash
查看进程:
root@492ffa26d865:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 1 0.2 9.7 1262696 182200 ? Ssl 14:52 0:00 mysqld
root 127 0.2 0.1 20216 1884 ? Ss 14:57 0:00 /bin/bash
root 133 0.0 0.0 17492 1148 ? R+ 14:58 0:00 ps -aux
查看数据库所在的文件夹:
root@492ffa26d865:/# ls -l /var/lib/mysql/
total 188452
-rw-r----- 1 mysql mysql 56 Aug 20 14:52 auto.cnf
-rw-r----- 1 mysql mysql 1329 Aug 20 14:52 ib_buffer_pool
-rw-r----- 1 mysql mysql 50331648 Aug 20 14:52 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Aug 20 14:52 ib_logfile1
-rw-r----- 1 mysql mysql 79691776 Aug 20 14:52 ibdata1
-rw-r----- 1 mysql mysql 12582912 Aug 20 14:52 ibtmp1
drwxr-x--- 2 mysql mysql 4096 Aug 20 14:52 mysql
drwxr-x--- 2 mysql mysql 8192 Aug 20 14:52 performance_schema
drwxr-x--- 2 mysql mysql 8192 Aug 20 14:52 sys
drwxr-x--- 2 mysql mysql 19 Aug 20 14:52 testDb
进入mysql:
root@492ffa26d865:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.13 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
四、修改容器中mysql的配置文件
默认镜像中并没有安装vi或者vim,需要手工安装
root@492ffa26d865:/# apt-get update && apt-get -yq install vim
然后就可以使用vim 来修改mysql的配置文件:
root@492ffa26d865:/# vim /etc/mysql/my.cnf
vim编辑器在此不做详述。
如果已经有一个比较成熟的my.cnf的配置方案,可以在宿主机上新建一个文件夹将已经设置好的my.cnf和conf.d这二个文件放到里面,
然后在新建容器的时候,直接使用参数”-v” 将这个文件夹映射到容器的”/etc/mysql”目录上即可。
***************************************************************************12-04************************************************
修改数据的登录密码
alter user root@localhost identified by 'password' 代表本地登录用户
alter user root@% identified by 'password' 代表所有链接到root的主机
*****************************************************************2018-12-08更新*****************************
有时候用官方镜像创建挂在目录的时候失败,是因为权限的问题,默认镜像是一mysql用户组运行,而挂在的宿主机的目录是root或者别的组的权限,所以不对应,造成权限问题
这时候需要添加用户组,并修改用户组的权限
1,groupadd mysql
2,useradd -r -g mysql -s /bin/false mysql
3,chown -R mysql:mysql /mysql_data
这个时候再挂在目录就可以了