美文网首页
docker安装mysql主从服务器

docker安装mysql主从服务器

作者: AlexYao | 来源:发表于2020-03-28 12:29 被阅读0次

    mysql 主从服务

    1.前期准备

    1. 准备两台实体服务器(10.12.110.97,10.12.110.98)
    2. 根据docker安装文档,安装好docker环境
    3. 修改docker启动参数,可参考如下参数

    提示,首次上线可按照该流程进行安装,如果数据库升级安装则该流程不能完全匹配,需要数据库暂停服务,进行手动同步后再进行主从设置。

    2.部署安装步骤

    2.1 镜像安装

    下载docker镜像,如果可以连接互联网从互联网下载,如果没有,导入mysql.tar文件,具体文件位置:ftp://10.12.110.100/image/mysql.tar 用户名:test 密码:test,需要在两台主备服务器上都安装mysql镜像

    • 在线
    docker pull mysql:5.7
    
    • 离线
    docker load mysql.tar
    

    2.2 创建mysql相关文件夹及其配置文件

    #配置文件目录
    mkidr -p /data/mysql/config
    #数据文件目录
    mkdir -p /data/mysql/data
    
    
    1. 创建mysql配置文件
    touch /data/mysql/config/master.cnf
    vi /data/mysql/config/master.cnf
    #########master.cnf############
    [mysqld]
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    #log-error      = /var/log/mysql/error.log
    # By default we only accept connections from localhost
    bind-address   = 0.0.0.0
    port=3307
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    ## 设置server_id,一般设置为IP,注意要唯一
    server_id=100
    ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
    binlog-ignore-db=mysql
    # 如果备份多个数据库,重复设置这个选项即可
    binlog-do-db=my_db
    ## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
    log-bin=edu-mysql-bin
    ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1M
    ## 主从复制的格式(mixed,statement,row,默认格式是statement)
    binlog_format=mixed
    ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
    expire_logs_days=7
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062
    
    touch /data/mysql/config/slave.cnf
    vi /data/mysql/config/slave.cnf
    #########slave.cnf############
    [mysqld]
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    #log-error      = /var/log/mysql/error.log
    # By default we only accept connections from localhost
    bind-address   = 0.0.0.0
    port=3307
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    
    ## 设置server_id,一般设置为IP,注意要唯一
    server_id=101
    ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
    binlog-ignore-db=mysql
    # 如果备份多个数据库,重复设置这个选项即可
    binlog-do-db=my_db
    ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
    log-bin=edu-mysql-slave1-bin
    ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1M
    ## 主从复制的格式(mixed,statement,row,默认格式是statement)
    binlog_format=mixed
    ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
    expire_logs_days=7
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062
    ## relay_log配置中继日志
    relay_log=edu-mysql-relay-bin
    ## log_slave_updates表示slave将复制事件写进自己的二进制日志
    log_slave_updates=1
    ## 防止改变数据(除了特殊的线程)
    read_only=1
    

    2.3 创建mysql相关文件夹及其配置文件

    • 启动mysql master容器服务

    # -p 3306:3306 端口映射  对外的端口映射
    # -v /data/mysql/data:/var/lib/mysql  设置mysql主数据目录放置在宿主机上的位置
    # -v /data/mysql/config/:/etc/mysql/mysql.conf.d/  配置文件文件夹的映射,可以将所有自定义的配置文件放置在这个文件夹中,默认mysql可以自动记载配置文件
    # -e MYSQL_ROOT_PASSWORD=Rzx@1218  设置mysql的root初始化密码
    # --restart always 每次docker启动的时候自动自动docker容器
    sudo docker run -p 3306:3306 --name mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/config/:/etc/mysql/mysql.conf.d/ -e MYSQL_ROOT_PASSWORD=Rzx@1218   --restart always -d mysql:5.7
    
    # 连接mysql,进入客户端
    docker run -it --net host  --rm mysql sh -c 'exec mysql -h "127.0.0.1" -P 3306 -uroot -pRzx@1218
    # 执行下列sql
    #创建slave同步账号,并进行授权
    CREATE USER 'slave'@'%' IDENTIFIED BY 'Rzx@1218';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 
    show master status; 
    #关键记录下master_log_file,master_log_pos两个关键数据
    
    • 启动mysql slave容器服务

    # -p 3306:3306 端口映射  对外的端口映射
    # -v /data/mysql/data:/var/lib/mysql  设置mysql主数据目录放置在宿主机上的位置
    # -v /data/mysql/config/:/etc/mysql/mysql.conf.d/  配置文件文件夹的映射,可以将所有自定义的配置文件放置在这个文件夹中,默认mysql可以自动记载配置文件
    # -e MYSQL_ROOT_PASSWORD=Rzx@1218  设置mysql的root初始化密码
    # --restart always 每次docker启动的时候自动自动docker容器
    sudo docker run -p 3306:3306 --name mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/config/:/etc/mysql/mysql.conf.d/ -e MYSQL_ROOT_PASSWORD=Rzx@1218   --restart always -d mysql:5.7
    
    # 连接mysql,进入客户端
    docker run -it --net host  --rm mysql sh -c 'exec mysql -h "127.0.0.1" -P 3306 -uroot -pRzx@1218
    # master_log_file 对应 File,具体请在主机上执行show master status; 获取
    # master_log_pos 对应 Position,具体请在主机上执行show master status; 获取
    change master to master_host='主机服务地址', master_user='slave', master_password='Rzx@1218', master_port=3306, master_log_file='edu-mysql-bin.000004', master_log_pos=2611, master_connect_retry=10;  
    show slave status;
    start slave;
    show slave status;
    

    3.测试

    • master执行

    # 在主mysql创建表并插入数据
    create database my_db;
    use my_db;
    create table hi_tb(id int(3),name char(10));
    insert into hi_tb values(001,'bobu');
    
    • slave执行

    # 在从数据库检查可以看到已经有对应的数据
    use my_db;
    show tables;
    select * from hi_tb;
    

    如果主服务器建库,建表,进行数据处理,在从服务器中都可以反映出变化结果,则主从同步配置完成

    4.附录

    相关文章

      网友评论

          本文标题:docker安装mysql主从服务器

          本文链接:https://www.haomeiwen.com/subject/cbdrmctx.html