docker安装mysql并配置主从同步

概要

linux下使用docker安装mysql服务,并配置mysql主从数据实时同步

实现步骤

  • 一、主库安装
  1. docker下载最新版mysql镜像包(未安装docker,则自行百度搜索linux安装docker教程)
    docker pull mysql
  2. 查看下载好的镜像
    docker images

  3. docker运行mysql服务,作为主机mysql服务,服务名是mysql
    docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
    -v /usr/local/mysql/log:/var/log/mysql \
    -v /usr/local/mysql/data:/var/lib/mysql \
    -v /usr/local/mysql/conf:/etc/mysql \
    -v /etc/localtime:/etc/localtime:ro \
    -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

    -p 3306:3306:指定宿主机端口与容器端口映射关系
    --name mysql:创建的容器名称
    --restart=always:总是跟随docker启动
    --privileged=true:获取宿主机root权限
    -v /usr/local/mysql/log:/var/log/mysql:映射日志目录,宿主机:容器
    -v /usr/local/mysql/data:/var/lib/mysql:映射数据目录,宿主机:容器
    -v /usr/local/mysql/conf:/etc/mysql:映射配置目录,宿主机:容器
    -v /etc/localtime:/etc/localtime:ro:让容器的时钟与宿主机时钟同步,ro表示只读。
    -e MYSQL_ROOT_PASSWORD=root:指定mysql环境变量,root用户初始密码是root
    -d mysql:latest:后台运行mysql容器,版本是latest

  4. 进入mysql的conf配置文件目录,并创建my.cnf文件

    cd /usr/local/mysql/conf && vi my.cnf

    在my.cnf文件中填入下面的内容后保存:

    [client]
    default-character-set=utf8mb4
    
    [mysql]
    default-character-set=utf8mb4
    
    [mysqld]
    # 设置东八区时区
    default-time_zone = '+8:00'
    #设置密码验证规则
    authentication_policy=mysql_native_password
    # 限制导入和导出的数据目录
    # 为空,不限制导入到处的数据目录;
    secure_file_priv=
    init_connect='SET collation_connection = utf8mb4_general_ci'
    init_connect='SET NAMES utf8mb4'
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    skip-character-set-client-handshake
    skip-name-resolve
    
    # 开启logbin
    log_bin=binlog
    # binlog日志格式
    binlog_format=ROW
    # mysql主从备份serverId
    server_id=12345
    #配置数据库表名小写
    lower_case_table_names=1
  5. 重启mysql服务,时my.cnf生效
    docker restart mysql
  6. 进入容器内部创建并授权用户
    #进入容器内部
    docker exec -it mysql /bin/bash
    #登录mysql,不要输入密码,两次按两次回车键即可
    mysql -u root -p
    #查看数据库
    show databases;
    #切换到mysql库
    use mysql;
    #创建root和master用户
    create USER 'root'@'%' IDENTIFIED BY 'root';
    grant all on *.* to 'root'@'%';
    create USER 'master'@'%' IDENTIFIED BY 'root';
    grant all on *.* to 'master'@'%';
    FLUSH PRIVILEGES;
    #使用exit命令退出mysql
    exit;
    #使用exit命令退出mysql容器
    exit;

    至此mysql主库安装并配置完成

  • 二、从库安装

  1. docker运行mysql服务,作为从机mysql服务,服务名是mysq_slave
    -p 4306:3306:指定宿主机端口与容器端口映射关系
    --name mysql_slave:创建的容器名称
    --restart=always:总是跟随docker启动
    --privileged=true:获取宿主机root权限
    -v /usr/local/mysql_slave/log:/var/log/mysql:映射日志目录,宿主机:容器
    -v /usr/local/mysql_slave/data:/var/lib/mysql:映射数据目录,宿主机:容器
    -v /usr/local/mysql_slave/conf:/etc/mysql:映射配置目录,宿主机:容器
    -v /etc/localtime:/etc/localtime:ro:让容器的时钟与宿主机时钟同步,ro表示只读。
    -e MYSQL_ROOT_PASSWORD=root:指定mysql环境变量,root用户初始密码是root
    -d mysql:latest:后台运行mysql容器,版本是latest

    -p 4306:3306:指定宿主机端口与容器端口映射关系(从机对外暴露端口是4306)

  2. 进入mysql的conf配置文件目录,并创建my.cnf文件

    cd /usr/local/mysql_slave/conf && vi my.cnf

    在my.cnf文件中填入下面的内容后保存:
     

    [client]
    default-character-set=utf8mb4
    
    [mysql]
    default-character-set=utf8mb4
    
    [mysqld]
    # 设置东八区时区
    default-time_zone = '+8:00'
    #设置密码验证规则
    authentication_policy=mysql_native_password
    # 限制导入和导出的数据目录
    # 为空,不限制导入到处的数据目录;
    secure_file_priv=
    init_connect='SET collation_connection = utf8mb4_general_ci'
    init_connect='SET NAMES utf8mb4'
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    skip-character-set-client-handshake
    skip-name-resolve
    
    #server_id不要和主库的server_id相同就行
    server_id=22345
    #一般从数据库作为读数据库
    default-storage-engine=MyISAM
    #配置数据库表名小写
    lower_case_table_names=1
    
    
  3. 重启mysql服务,时my.cnf生效
    docker restart mysql_slave
  4. 进入容器内部创建并授权用户
    #进入容器内部
    docker exec -it mysql_slave /bin/bash
    #登录mysql,不要输入密码,两次按两次回车键即可
    mysql -u root -p
    #查看数据库
    show databases;
    #切换到mysql库
    use mysql;
    #创建root和slave用户
    create USER 'root'@'%' IDENTIFIED BY 'root';
    grant all on *.* to 'root'@'%';
    create USER 'slave'@'%' IDENTIFIED BY 'root';
    grant all on *.* to 'slave'@'%';
    FLUSH PRIVILEGES;
    #使用exit命令退出mysql
    exit;
    #使用exit命令退出mysql容器
    exit;

    至此mysql从库安装并配置完成

  • 三、配置数据同步

  1. 使用root账号/密码(root/root)远程连接主库,并查看主库binlog日志状态
    show master status;如下图所示,标识主库已开启binlog日志
  2. 使用root账号/密码(root/root)远程连接从库,并执行下面sql:

    #停止slave
    stop slave;
    #同步数据配置
    CHANGE MASTER TO MASTER_HOST = '192.168.7.46', #主库host
    MASTER_PORT = 3306,#主库端口
    MASTER_USER = 'master',#主库用于binlog同步的账户
    MASTER_PASSWORD = 'root',#主库用于binlog同步的账户密码
    MASTER_LOG_FILE = 'binlog.000005',#主库binlog文件,第1步执行结果中获取
    MASTER_LOG_POS = 5847;#主库binlog文件位置,第1步执行结果中获取


  3. 从库数据库中,启动slave同步进程

    start slave;#启动

  4. 登录从库,查看同步配置
     
    #进入从机容器内部
    docker exec -it mysql_slave /bin/bash
    #登录mysql,不要输入密码,两次回车即可
    mysql -u root -p
    #查看binlog同步配置及状态
    show slave status\G;
    

    如上图所属,表示同步已启动并正在运行中
  • 四、测试数据主从同步

  1. 在主库新建数据库test,然后创建表test,再给test表新增数据,然后登录或刷新从库,查看表及数据

    主库数据情况如下图:


    从库数据情况如下图:
  2. 从上面两个图对比,发现主库数据变化后,刷新从库,即可看到从库数据也及时同步过来了。

小结

mysql主从配置,重点在从库的配置,如果从库出现异常,导致无法正常同步了,则执行下面sql进行恢复

#停止slave
stop slave;
#同步数据配置
CHANGE MASTER TO MASTER_HOST = '192.168.7.46', #主库host
MASTER_PORT = 3306,#主库端口
MASTER_USER = 'master',#主库用于binlog同步的账户
MASTER_PASSWORD = 'root',#主库用于binlog同步的账户密码
MASTER_LOG_FILE = '此处的值需要在主库通过
show master status获取',
MASTER_LOG_POS = 此处的值需要在主库通过
show master status获取;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值