一、安装docker
1.1 安装之前卸载原有的环境
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1.2 简化安装并安装数据存储驱动包
yum install -y yum-utils device-mapper-persistent-data lvm2
1.3配置阿里云镜像地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.4 yum选择快的安装源
yum makecache fast
1.5 安装docker开源社区版
yum -y install docker-ce
1.6 启动docker
service docker start
1.7 查看docker版本信息
docker version
1.8 开机启动docker
systemctl enable docker
1.9修改阿里云加速器来下载资源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://j14v483r.mirrors.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
二、docker安装mysql
2.1 拉取mysql镜像
docker pull mysql
2.2 查看镜像
docker images
2.3 启动容器
docker run \
--restart=always \
--privileged=true \
-p 3306:3306 \
--name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:latest \
--default_authentication_plugin=mysql_native_password \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci
2.4 创建挂载目录
mkdir -p /mydata/mysql/{conf,logs,data}
2.5 复制容器配置文件到挂载目录
docker cp mysql: /etc/mysql/my.cnf /mydata/mysql/conf/
2.6 销毁容器
docker rm -f 容器ID
2.7 挂载方式启动容器
docker run \
--privileged=true \
--restart=always \
-v /mydata/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/logs:/var/log/mysql \
--privileged=true \
-p 3306:3306 \
--name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:latest \
--default_authentication_plugin=mysql_native_password \
--character-set-server=utf8 \
--collation-server=utf8_general_ci
docker配置mysql主从复制
3.1 安装mysql
docker pull mysql
3.2 创建主从挂载目录
主:mkdir -p /mydata/mysql/mysql-master/{conf,logs,data}
从:mkdir -p /mydata/mysql/mysql-slave/{conf,logs,data}
3.3启动主从容器 (注:将2.5copy出的my.cnf复制到主从conf目录下)
3.3.1启动主容器
docker run \
--privileged=true \
--restart=always \
-v /mydata/mysql/mysql-master/conf/my.cnf:/etc/mysql/my.cnf \
-v /mydata/mysql/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql/mysql-master/logs:/var/log/mysql \
--privileged=true \
-p 3306:3306 \
--name mysql-master \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:latest \
--default_authentication_plugin=mysql_native_password \
--character-set-server=utf8 \
--collation-server=utf8_general_ci
3.3.2启动从容器
docker run \
--privileged=true \
--restart=always \
-v /mydata/mysql/mysql-slave/conf/my.cnf:/etc/mysql/my.cnf \
-v /mydata/mysql/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql/mysql-slave/logs:/var/log/mysql \
--privileged=true \
-p 3307:3306 \
--name mysql-slave \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:latest \
--default_authentication_plugin=mysql_native_password \
--character-set-server=utf8 \
--collation-server=utf8_general_ci
3.4 修改主从my.cnf配置文件
3.4.1 修改主my.cnf
# vim /mydata/mysql/mysql-master/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
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
skip-name-resolve
server_id=1
log-bin=mysql-bin
read-only=0
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
3.4.2 修改从my.cnf
# vim /mydata/mysql/mysql-slave/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
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
skip-name-resolve
server_id=2
log-bin=mysql-bin
read-only=1
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
server_id:唯一标识,在主从中需唯一
log-bin:开启二进制日志功能
read-only:0为读写,1为只读
replicate-ignore-db:不同步的数据库,一般是Mysql自带的数据库就不同步
binlog-do-db:配置要同步的数据库,不配置则全同步
3.4.3 重启主从容器
重启主容器:docker restart mysql-master
重启从容器:docker restart mysql-slave
3.5 进入mysql主容器并配置从库
3.5.1 进入主mysql
docker exec -it mysql-master bash
mysql -uroot -p '你的密码'
3.5.2 配置从库,同步数据
create user 'slave'@'%' identified by '123456';
grant replication slave,replication client on *.* to 'slave'@'%';
flush privileges;刷新
3.5.3 查看master状态
show master status;
File和Position字段的值后面将会用到
3.6 进入如mysql从容器并配置
3.6.1 查看master地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id
3.6.2 进入从mysql
docker exec -it mysql-slave bash
mysql -uroot -p '你的密码'
3.6.3 执行命令
change master to master_host='172.17.0.2',master_user='slave',
master_password='123456',master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=171314,master_connect_retry=10,
get_master_public_key=1;
master_host:Master的地址,是容器的对立IP
master_port:Master的端口号,是容器的端口号;
master_user:用于数据同步的用户;
master_password:用于同步用户的密码;
master_log_file:指定Slave从哪个日志文件开始复制数据,即上文中提到的File字段值;
master_log_pos:从哪个Position开始读,即上文中提到的Position字段的值;
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒;
get_master_public_key=1:mysql8.0以上需要使用RSA加密来传输密码
3.6.4 开启主从复制
start slave;
3.6.4 查看主从同步状态
show slave status \G;
都为YES则配置成功
不要使用super用户操作从库否则从库read-only=1不起作用