docker 安装mysql 并挂载数据 配置文件,并且设置主从复制

2021/7/24 2:08:49

本文主要是介绍docker 安装mysql 并挂载数据 配置文件,并且设置主从复制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

      • 描述
      • 安装mysql
      • 配置远程连接
      • 主从配置
      • 测试主从同步

描述

本文档记录了mysql安装过程,主从配置过程,主备实现方式。

安装mysql

  • 创建mysql工作目录,用于挂载数据 配置文件等
    #mkdir /root/mysql/data
    #mkdir /root/mysql/conf.d
    #mkdir /root/mysql/conf
  • 启动一个未挂载的mysql容器
    docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
  • 进入容器复制需要挂载的目录

# docker cp 4e71be6b176c:/var/lib/mysql /root/mysql/data
# docker cp 4e71be6b176c:/etc/mysql/my.cnf /root/mysql/conf/my.cnf
# docker cp 4e71be6b176c:/etc/mysql/conf.d /root/mysql/conf.d

#================配置文件复制,数据挂载========================

# 开启一个未挂载的容器  docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
# 将容器内的数据以及配置文件拷贝出来 
# docker exec -it mysql /bin/bash
# docker cp 4e71be6b176c:/var/lib/mysql /root/mysql/data
# docker cp 4e71be6b176c:/etc/mysql/my.cnf /root/mysql/conf/my.cnf
# docker cp 4e71be6b176c:/etc/mysql/conf.d /root/mysql/conf.d

  • 启动mysql 其脚本如下
#================配置文件复制,数据挂载========================

# 开启一个未挂载的容器  docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
# 将容器内的数据以及配置文件拷贝出来 
# docker exec -it mysql /bin/bash

# docker cp 4e71be6b176c:/var/lib/mysql /root/mysql/data
# docker cp 4e71be6b176c:/etc/mysql/my.cnf /root/mysql/conf/my.cnf
# docker cp 4e71be6b176c:/etc/mysql/conf.d /root/mysql/conf.d

docker stop mysql \
docker rm mysql \
docker run  -d \
        --restart=always \
        --privileged=true \
        -v /root/mysql/data/:/var/lib/mysql \
        -v /root/mysql/conf.d:/etc/mysql/conf.d \
        -v /root/mysql/conf/my.cnf:/etc/mysql/my.cnf \
        -v /root/mysql/log:/var/log/mysql \
        -p 3306:3306 \
        --name mysql \
        -e MYSQL_ROOT_PASSWORD=123456 \
        mysql

配置远程连接

mysql>alter user 'root'@'%' identified by '123456' password expire never;
mysql>alter user 'root'@'%' identified with mysql_native_password by '123456';
mysql>flush privileges;

主从配置

  • 进入容器master机器上创建主从连接账户

mysql>CREATE USER 'slaves'@ '%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';
mysql>flush privileges;

查看账户权限
mysql>show grants for root;
mysql>show grants for slaves;
在这里插入图片描述

  • master配置my.cnf文件
[mysqld]

pid-file        = /var/run/mysqld/mysqld.pid

socket          = /var/run/mysqld/mysqld.sock

datadir         = /var/lib/mysql

secure-file-priv= NULL

server-id=201 #设置主服务器的ID,可以任意配置但是多个主从之间不能重复

innodb_flush_log_at_trx_commit=2  # 写入磁盘策略

sync_binlog=1  #开启binlog日志同步功能

expire_logs_days=180 #二进制日志保留天数

log-bin=mysql-bin-1 #binlog日志文件名(可以任意命名)

#binlog-do-db=test  # 这个表示只同步某个库 (如果没有此项,表示同步所有的库)
#binlog-ignore-db=xxxx # 二进制日志中忽略数据库

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Custom config should go here

!includedir /etc/mysql/conf.d/

  • slave从机器配置my.cnf
[mysqld]

pid-file        = /var/run/mysqld/mysqld.pid

socket          = /var/run/mysqld/mysqld.sock

datadir         = /var/lib/mysql

secure-file-priv= NULL

read-only=1 #是否只读,0 代表非只读 1:代表只读

server-id=202 #设置主服务器的ID,可以任意配置但是多个主从之间不能重复

innodb_flush_log_at_trx_commit=2  #

sync_binlog=1  #开启binlog日志同步功能

expire_logs_days=180, # 二进制日志保留天数

log-bin=mysql-bin-1 #binlog日志文件名(可以任意命名)

# binlog-do-db=test  # 这个表示只同步某个库 (如果没有此项,表示同步所有的库)

#binlog-ignore-db=xxxx # 还有一个参数是指定不同步哪些库,这里不再赘述
# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Custom config should go here

!includedir /etc/mysql/conf.d/
  • 重启master slave 数据库

进入master 数据库容器,查看主数据库状态,可以获得数据库的binlog日志文件名称和位置,用于配置从数据库开始同步的文件和位置

mysql>show master status
在这里插入图片描述
进入slave数据库容器

change master to master_host='192.168.43.201',master_user=' slaves ',master_password='123456!',get_master_public_key=1,master_log_file='mysql-bin-1.000002 ',master_log_pos= 650,master_port=3306;

参数说明

master_host:主数据库IP地址
master_user:主数据库连接用户名
master_password:主数据量连接密码
master_port:主数据端口
master_log_file:开始同步的主数据库日志名称,主数据库执行show master status 可获得当前binlog文件名称和位置
master_log_pos:开始同步的主数据库日志开始位置,主数据库执行show master status 可获得当前binlog文件名称和位置
get_master_public_key=1,mysql8默认使用插件caching_sha2_password连接需要拿到server的public key来加密password

  • slave查看状态

开启或关闭主从同步
mysql>start slave;

查看主从同步

mysql>show slave status\G;
在这里插入图片描述
只有slave都为yes时配置才成功

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

测试主从同步

navicat 连接master数据库



这篇关于docker 安装mysql 并挂载数据 配置文件,并且设置主从复制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程