docker配置mysql主从复制

原文链接: http://blog.fenlanli.com/articles/2019/08/19/1566199649195.html

docker配置mysql主从复制_第1张图片

  • 获取Mysql镜像
    网易蜂巢镜像:
    拉取镜像:docker pull hub.c.163.com/library/mysql:latest
    查看镜像:docker images
    docker配置mysql主从复制_第2张图片

  • 创建文件夹和配置文件
    sudo mkdir -p /docker/mysql/{master,slave}/data
    创建好的目录结构如下:
    docker配置mysql主从复制_第3张图片
    添加主库配置文件:sudo vim /docker/mysql/master/my.cnf

    [mysqld]
    user=mysql
    log-bin=mysql-bin
    server-id=1
    character-set-server=utf8mb4
    default_authentication_plugin=mysql_native_password
    table_definition_cache=400
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    

    添加从库配置文件:sudo vim /docker/mysql/slave/my.cnf

    [mysqld]                                                                             
    user=mysql
    server-id=2
    character-set-server=utf8mb4
    default_authentication_plugin=mysql_native_password
    table_definition_cache=400
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    
  • 创建Mysql桥接网络,用于主从容器直接互联:
    docker network create mysql
    创建Mysql主库容器:

    docker run -d --privileged=true -p 3307:3306 -v 	/docker/mysql/master/my.cnf:/etc/mysql/my.cnf -v /docker/mysql/master/data:/var/lib/mysql -v /docker/mysql/master/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master --network       mysql --network-alias mysql-master hub.c.163.com/library/mysql           
    

    创建Mysql从库容器:

     docker run -d --privileged=true -p 3308:3306 -v /docker/mysql/slave/my.cnf:/etc/mysql/my.cnf -v /docker/mysql/slave1/data:/var/lib/mysql -v /docker/mysql/slave/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave --network mysql --network-alias mysql-slave hub.c.163.com/library/mysql
    

    docker配置mysql主从复制_第4张图片

  • 配置Mysql主从复制
    配置主服务器:
    docker exec -it mysql-master bash
    mysql -u root -p 密码是上面docker命令中MYSQL_ROOT_PASSWORD中设置的。

    # 这里使用root用户进行主从复制, %为允许所有ip进行复制。
    GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';
    
    # 刷新权限 
    flush privileges;
    # 查看主服务器状态 
    show master status;
    #需要记录其中的File,  Position字段内容
    exit; # 退出mysql
    exit; # 退出容器
    

    docker配置mysql主从复制_第5张图片

    配置从服务器:
    docker exec -it mysql-slave bash
    mysql -u root -p 密码是上面docker命令中 MYSQL_ROOT_PASSWORD中设置的

    #输入以下内容
    change master to master_host='mysql-master',master_user='root',master_password='root密码',master_log_file='刚才记住的File列的内容',master_log_pos=position的内容(不用加引号),master_port=3306;
    
    # 例如
    change master to master_host='mysql-master',master_user='root',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=502,master_port=3306;
    
    # 启动slave
    start slave;
    # 查看slave状态
    show slave status\G;
    

    docker配置mysql主从复制_第6张图片
    Slave_IO_RunningSlave SQL Ruing都是Yes时,说明配置成功了, 发现Slave_SQL_Running: No, 并且出现了一条错误信息:Last_Error: Unable to use slave's temporary directory /tmp - Can't read dir of '/tmp/' (Errcode: 13 - Permission denied)
    尝试给/tmp目录加权限并没有成功。
    /docker/mysql/slave/my.cnf文件中的[mysqld]下方添加配置tmpdir=/var/lib/mysql
    重启docker容器: docker restart mysql-slave
    再次查看mysql-slave中的状态:
    docker配置mysql主从复制_第7张图片

  • 测试主从复制
    进入主库:docker exec -it mysql-master bashmysql -u root -p
    创建数据库和表,添加测试数据:

      CREATE DABTABASE goods DEFAULT CHARSET UTF8mb4;
      USE goods;
      CREATE TABLE categories
      (
      	cate_id SMALLINT(6) UNSIGNED NOT NULL   AUTO_INCREMENT,
        cate_name VARCHAR(30) NOT NULL DEFAULT '' COMMENT '分类名称',
        cate_pid SMALLINT(6) NOT NULL DEFAULT 0 COMMENT '父级分类ID',
        cate_order TINYINT(1) NOT NULL DEFAULT 0 COMMENT '排序字段, 越小越靠前',
        PRIMARY KEY(cate_id),
      INDEX  c_order(cate_order)
      )ENGINE=INNODB AUTO_INCREMENT = 1 DEFAULT   CHARSET=UTF8mb4 COMMENT '分类表';
      INSERT INTO categories(cate_id, cate_name, cate_pid, cate_order)   VALUES (1, '电子产品', 0, 0), (2, '衣服箱包', 0, 0),(3, '电脑配件', 1, 0), (4, '衣服', 2, 1),(5, '手机', 1, 0);
    

    docker配置mysql主从复制_第8张图片

进入从库:
docker exec -it mysql-master bashmysql -u root -p
验证数据是否同步:
docker配置mysql主从复制_第9张图片

个人博客

你可能感兴趣的:(Mysql,Docker)