mysql主从及遇到问题

1.基于mysql 8.0的docker
2.配置mysql的配置
  • 1.创建master文件夹,并创建my.cnf文件:
     
    [mysqld]
    ## 设置server_id,注意要在同一局域网内唯一
    server-id=1
    ## 开启binlog
    log-bin=mysql-bin
    ## binlog格式(mixed、statement、row,默认格式是statement)
    binlog_format=mixed
  • 2.创建slaver文件夹,并创建my.cnf文件
     
    [mysqld]
    ## 设置server_id,注意要唯一
    server-id=2
    ## 可以开启binlog,以备Slave作为其它Slave的Master时使用
    #log-bin=mysql-bin
    ## relay_log配置中继日志
    relay_log=relay-bin
    ## 如果需要同步函数或者存储过程
    log_bin_trust_function_creators=true
    ## binlog格式(mixed、statement、row,默认格式是statement)
    binlog_format=mixed
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062   ## 跳过主从复制中遇到的错误,可配可不配
    read-only=1 #1只读,0读写
  • 3.同级可以创建sh文件
    #!/bin/sh
    # $0获取执行命令的文件;realpath获取真实的路径;dirname获取该文件的绝对路径
    script_dir=$(dirname "$(realpath "$0")")
    docker run -itd --name doyen$1 -p ${2}:3306 -e MYSQL_ROOT_PASSWORD=123456 \
    -v ${script_dir}/${1}/my.cnf:/etc/my.cnf \
    -v ${script_dir}/${1}/data:/var/lib/mysql \
    -v ${script_dir}/${1}/log:/var/log --restart always mysql:8.0
  • 4.分别执行sh:
    #启用master容器,master文件名,3306端口
    sh mysql.sh master 3306
    
    #启用slaver容器,slaver文件名,3307端口
    sh mysql.sh master 3307
  • 5.登录master容器
    #进入容器,如果失败使用 sh
    docker exec -it master bash
    #登录mysql
    mysql -uroot -p123456
    use mysql;
    #可以移除root的所有地区登录,只保留能本机登录
    drop user 'root'@'%';
    #创建slaver用户,使用明文密码连接
    create user 'slaver'@'%' identified with mysql_native_password by '123456';
    grant replication SLAVE ON *.* TO 'slaver'@'%';
    flush privileges;
    
    #查看binlog的数据,用于slaver的偏移量迁移
    show master status;
  • 6.登录slaver服容器
    #master_log_file和master_log_pos 为master中show展示的数据
    change master to master_host='master-ip',
                         master_port=3306,
    					 master_user='slaver',
    					 master_password='123456',
    					 master_log_file='mysql-bin.000002',
    					 master_log_pos=157;
    start SLAVE;
    show slave status\G;

 主从mysql完成,Slave_IO_RunningSlave_SQL_Running 都为 Yes。

二 遇到问题
  1. 一些博客提示mysql的配置位置不对,导致路径映射不对,使用默认的配置,引发serverId都是1,会主从冲突,位置为 /etc/my.cnf,修改配置后需要docker restart。
    查询文件:docker exec -it container find / -name "my.cnf"
  2. 如果slave的change连接master写错了,可以执行stop slave;reset slave;再重新绑定。
  3. 这是重头开始复制,如果master已经运行了一段时间
    #master容器:全量dump,--source-data=2表示生成的备份文件中包含 CHANGE MASTER TO 语句
    #--single-transaction: 保证备份在一致性点上完成
    #--flush-logs: 在备份开始时刷新 MySQL 的二进制日志
    #--hex-blob: 处理二进制字段时使用十六进制表示
    
    mysqldump -u root -p --all-databases --source-data=2 --single-transaction --flush-logs --hex-blob > /var/lib/mysql/full-backup.sql
    
    #将master的该文件mv到slaver的映射路径中,进入slaver容器
    
    mysql -u root -p < full-backup.sql
    
    #执行完后再配置binlog同步点,从sql文件中找出偏移量
    
    CHANGE MASTER TO 。。。
    
    #-------------------------------二。数据太多,只dump表结构-------
    mysqldump -u root -p123456 --no-data --databases your_database > schema-only.sql
    mysql -u root -p123456 < schema-only.sql
    
    start slave;
    

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值