• Mac操作系统上使用Docker创建MySQL主从数据库


    拉取MySQL镜像

    ## 下载最新版本的MySQL镜像
    docker pull mysql
    

    创建两个主从MySQL数据库容器

    第一步,需要创建一个目录,用来存放与容器中配置文件对应的物理地址
    目录结构如下:

    master my.cnf配置文件内容如下:

    [mysqld]
    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

    slave my.cnf配置文件内容如下:

    [mysqld]
    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

    第二步,创建两个主从镜像,命令如下:
    创建主数据库master

    docker run --name mysql-master -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=yourpassword -v /Users/young/programs/docker_mysql/master/data:/var/lib/mysql -v /Users/young/programs/docker_mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /Users/young/programs/docker_mysql/master/mysql-files:/var/lib/mysql-files mysql:latest
    

    创建从数据库slave

    docker run --name mysql-slave -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=yourpassword -v /Users/young/programs/docker_mysql/slave/data:/var/lib/mysql -v /Users/young/programs/docker_mysql/slave/conf/my.cnf:/etc/mysql/my.cnf -v /Users/young/programs/docker_mysql/master/mysql-files:/var/lib/mysql-files mysql:latest
    

    这里要注意,MySQL8以后,需要在映射文件中加入-v /Users/young/programs/docker_mysql/master/mysql-files:/var/lib/mysql-files,否则会创建失败。

    配置主从数据库

    配置主数据库master

    //进入master容器
    docker exec -it mysql-master bash
    
    //进入mysql数据库,密码为前边设置的密码
    mysql -u root -p 
    
    //创建一个用户来同步数据,每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE 权限。
    //出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password
    CREATE USER 'slave'@'%' IDENTIFIED BY 'your password';(这样有可能在slave创建与master连接时报错)
    或者
    CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'your password';
    
    //对用户进行授权(复制权限)
    GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';
    
    //查看状态,记住File、Position的值,在Slave中将用到
    show master status;
    
    //查询master容器的IP,会在slave设置主库连接时用到
    docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
    

    配置从数据库slave

    //进入slave容器
    docker exec -it mysql-slave bash
    
    //启动mysql命令
    mysql -u root -p
    
    //设置主库链接  change master to 语法参考[语法参考](https://blog.csdn.net/jesseyoung/article/details/41942809)
    change master to master_host='本机ip',master_user='slave',master_password='your password',master_log_file='mysql-bin.000004',master_log_pos=master's position,master_port=3306;
    
    //启动从库同步
    start slave;
    
    //查看状态
    show slave statusG;
    
    //如果 show slave statusG命令结果中出现:
    //Slave_IO_Running: Yes
    //Slave_SQL_Running: Yes
    //以上两项都为Yes,那说明没问题了。
    
    //否则,从新配置从数据
    stop slave;
    reset slave all;
    

    注意,如果在查看slave状态时,提示Authentication plugin 'caching_sha2_password' cannot be loaded错误,出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,则要更改master数据库中密码的加密规则。所以,为了以防万一,在master创建用户来同步数据时,可以直接使用
    CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'your password';

  • 相关阅读:
    在jenkins中新建节点,启动方式中没有“通过java web启动”
    在jenkins上执行web自动化脚本出现cannot find Chrome binary
    修改禅道的默认端口
    jmeter修改字体大小
    电脑中安装了两个版本的jdk,后装的会把第一个覆盖掉
    各种浏览器的驱动
    js中的null和undefined总结
    关于 es6的 let 特性在 for 循环结构 的个人理解
    ajax五,jsonp跨域的本质
    ajax四,封装ajax并优化
  • 原文地址:https://www.cnblogs.com/mr-ziyoung/p/13647897.html
Copyright © 2020-2023  润新知