• docke安装mysql以及主从搭建(并且指定数据生成路径)


    一、mysql的安装

    1、下载

    docker pull mysql:8.0
    
    • 1

    2、提前创建好文件配置,以及数据卷的文件路径

    mkdir -p /url/local/docker/mysql/log
    mkdir -p /url/local/docker/mysql/data
    mkdir -p /url/local/docker/mysql/conf
    mkdir -p /url/local/docker/mysql/mysql-files
    
    • 1
    • 2
    • 3
    • 4

    3、然后进入/url/local/docker/mysql/conf编辑my.conf文件

    vim /url/local/docker/mysql/conf/my.conf
    
    • 1
    [mysql]
    #设置mysql客户端默认字符集
    default-character-set=utf8mb4
    [mysqld]
    #允许最大连接数
    max_connections=200
    #服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8mb4
    #创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    #sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4、启动设置挂载目录

    docker run \
    --name mysql \
    -d \
    -p 3306:3306 \
    --restart unless-stopped \
    -v /url/local/docker/mysql/log:/var/log/mysql \
    -v /url/local/docker/mysql/data:/var/lib/mysql \
    -v /url/local/docker/mysql/conf:/etc/mysql \
    -v /url/local/docker/mysql/mysql-files:/var/lib/mysql-files \
    -e MYSQL_ROOT_PASSWORD=123456 \
    --privileged=true \
    mysql:8.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    说明:
    1、-v:指定容器数据卷的位置,mysql安装完成后,在容器里面和容器外面挂载的数据同步执行,并且如果mysql容器被删除了,挂载到服务器上保存的数据也不会被删除。
    2、如果直接启动命令,然后在执行文件的编辑也是可以的,需要编辑好文建好后,修改启动容器的脚本,然后执行docker restart mysql即可

    可能出现的问题

    #1、无法连接(不允许远程连接)
    docker exec -it mysql /bin/bash
    mysql -u root -p
    use mysql 
    # 更新root - localhost 为 root - %
    update user set host = '%' where user = 'root' and host='localhost'; 
    # 设置允许远程用户访问
    GRANT ALL ON *.* TO 'root'@'%'; 
    flush privileges;# 刷新权限
    #更新用户加密方式,mysql8默认的加密方式
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    二、mysql主从安装

    mysql主服务

    1、编辑配置文件

    mkdir -p /url/local/docker/mysql_master/mysql/log
    mkdir -p /url/local/docker/mysql_master/mysql/data
    mkdir -p /url/local/docker/mysql_master/mysql/conf
    mkdir -p /url/local/docker/mysql_master/mysql/mysql-files
    # 编辑文件内容
    vim /url/local/docker/mysql_master/mysql/conf/my.conf 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    [mysqld]
    ## 设置server_id,同一局域网中需要唯一
    server_id=101 
    ## 指定不需要同步的数据库名称
    binlog-ignore-db=mysql  
    ## 开启二进制日志功能
    log-bin=mall-mysql-bin  
    ## 设置二进制日志使用内存大小(事务)
    binlog_cache_size=1M  
    ## 设置使用的二进制日志格式(mixed,statement,row)
    binlog_format=mixed  
    ## 二进制日志过期清理时间。默认值为0,表示不自动清理。
    expire_logs_days=7  
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2、启动mysql主服务

    docker run \
    --name mysql-master \
    -d \
    -p 3306:3306 \
    --restart unless-stopped \
    -v /url/local/docker/mysql_master/mysql/log:/var/log/mysql \
    -v /url/local/docker/mysql_master/mysql/data:/var/lib/mysql \
    -v /url/local/docker/mysql_master/mysql/conf:/etc/mysql \
    -v /url/local/docker/mysql_master/mysql/mysql-files:/var/lib/mysql-files \
    -e MYSQL_ROOT_PASSWORD=123456 \
    --privileged=true \
    mysql:8.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3、重启mysql

    docker restart mysql-master
    
    • 1

    4、进入容器里面

    docker exec -it mysql-master bash
    mysql -uroot -p123456
    
    • 1
    • 2

    5、master容器实力内创建同步用户

    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON*.* TO 'slave'@'%';
    
    • 1
    • 2

    mysql从服务

    • 1、新建挂载文件
    mkdir -vp  /url/local/docker/mysql-slave
    
    • 1

    2、编辑从服务的配置文件

    mkdir -p /url/local/docker/mysql-slave/mysql/log
    mkdir -p /url/local/docker/mysql-slave/mysql/data
    mkdir -p /url/local/docker/mysql-slave/mysql/conf
    mkdir -p /url/local/docker/mysql-slave/mysql/mysql-files
    # 编辑文件内容
    vim /url/local/docker/mysql-slave/mysql/conf/my.conf 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    vim /url/local/docker/mysql-slave/mysql/conf/my.conf

    3、编辑从服务里面的文件
    ```shell
    [mysqld]
    ## 设置server_id,同一局域网中需要唯一
    server_id=102
    ## 指定不需要同步的数据库名称
    binlog-ignore-db=mysql  
    ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
    log-bin=mall-mysql-slave1-bin  
    ## 设置二进制日志使用内存大小(事务)
    binlog_cache_size=1M  
    ## 设置使用的二进制日志格式(mixed,statement,row)
    binlog_format=mixed  
    ## 二进制日志过期清理时间。默认值为0,表示不自动清理。
    expire_logs_days=7  
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062  
    ## relay_log配置中继日志
    relay_log=mall-mysql-relay-bin  
    ## log_slave_updates表示slave将复制事件写进自己的二进制日志
    log_slave_updates=1  
    ## slave设置为只读(具有super权限的用户除外)
    read_only=1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    4、启动mysql从服务

    docker run -p 3308:3306 --name mysql-slave \
    -v /url/local/docker/mysql-slave/mysql/log:/var/log/mysql \
    -v /url/local/docker/mysql-slave/mysql/data:/var/lib/mysql \
    -v /url/local/docker/mysql-slave/mysql/conf:/etc/mysql \
    -e MYSQL_ROOT_PASSWORD=123456  \
    -d mysql:8.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5、启动slave容器(如果先启动,后指定容器数据卷路径,需要执行此操作)

    docker restart mysql-slave
    
    • 1

    6、在主库中查看主从同步状态

    show master
    status;  
    
    • 1
    • 2

    7、进入从服务器的容器内不

    docker exec -it mysql-slave bash
    mysql -uroot -p123456  
    
    • 1
    • 2

    8、在数据库中配置主从复制

    change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
    
    • 1
    • 参数说明
      master_host:主数据库的IP地址;
      master_port:主数据库的运行端口;
      master_user:在主数据库创建的用于同步数据的用户账号;
      master_password:在主数据库创建的用于同步数据的用户密码;
      master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
      master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
      master_connect_retry:连接失败重试的时间间隔,单位为秒。

    9、从数据库中查看主从同步状态

    show skave status \G;
    
    • 1

    10、在从数据库中开启主从同步进入从数据库中

     start slave;  
    
    • 1

    11、查看从数据库状态发现已经同步

    Slave_IO_Running: yes
    Slave_SQL_Running: yes
    
    • 1
    • 2

    主从复制测试

    eg:主机新建库,使用库-新建表,插入数据 ok 从机使用库-查看记录,ok

  • 相关阅读:
    无线网络、HTTP缓存、IPv6
    正则表达式
    用人工智能压缩图像的尝试和计算
    【Linux学习笔记1】-【网络连接的三种模式:桥接模式、NAT模式、主机模式,克隆虚拟机,虚拟机快照,安装vmtools,设置共享文件夹】
    如何在 JavaScript 中创建虚拟键盘
    【Go语言入门指南】零基础入门 go 语言 | Golang 入门指南
    Java 字节与进制转换
    [附源码]计算机毕业设计点餐系统
    【Excel实战】--目录及链接
    ICCV2021|你以为这是一个填色模型?其实我是检索模型!
  • 原文地址:https://blog.csdn.net/www1056481167/article/details/125551759