【备忘】我的主从复制技术学习心路历程

首先感谢一下前辈贡献的文章。

没事了就琢磨一下技术,这次是搞主从复制。

由于是自学,所以去百度了一下,随机找到一篇文章就开始练习。。。

但是这篇文章并不符合我的情况,所以很遗憾,失败了,而且一直失败。。。

不过没关系,继续找相关文章,一遍一遍的阅读,一步一步操作,嗯~,对,就是这样,继续失败。。。

good nice!

上我的操作步骤:

服务器环境:

  • CentOS7.4
  • mysql8

主从复制技术要求:

  • 两台服务器(一主,一从)
  • 分别建立空库:mytest(InnoDB引擎)
  • 准备好创建数据表的SQL语句
    CREATE TABLE `t_test` (
      `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
      `name` varchar(100) DEFAULT NULL COMMENT '名称',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE=InnoDB COMMENT='测试表';
     

     

let`s go !

先来主服务器:

  • find / name my.cnf
  • 打开配置
  • 找到[mysqld]模块
    写入这几行代码(目前我没有复杂的需求,只要配置成功,能复制就可以了)
    # 日志文件(没有就自己创建并授权)
    log-bin=/var/log/mysql/mysql-bin
    
    # 持久性:为了在使用带事务的InnoDB进行复制设置时尽可能提高持久性
    innodb_flush_log_at_trx_commit = 1
    
    # 一致性: 1表示每次事务提交后,就将数据刷到磁盘,安全;0表示MySQL不控制binlog的刷新,
    # 由文件系统自己控制它的缓存的刷新,不安全,牺牲了数据一致性
    sync_binlog = 1
    
    # 以上配置的作用,参考这篇文章:https://www.cnblogs.com/xuxubaobao/p/10839979.html
    
    # 主服务器ID(理解为编号吧,可以使ip最后一段)
    server-id = 1
    
    # 要复制的表(先就这么理解)(开始不要心大,只复制一个数据库就好了)
    binlog-do-db=mytest
    
    # 温馨提示:
    #  innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL磁盘写入策略,以及数据安全性
    # 的关键参数,当两个参数都设置为1的时候写入性能最差,
    # 推荐做法是innodb_flush_log_at_trx_commit=2,sync_binlog=100
  • 保存配置,重启
    systemctl restart mysqld
  •  

再来从服务器:

  • find / name my.cnf
  • 打开配置
  • 找到[mysqld]模块
    # 从服务器ID(理解为编号吧)
    server-id = 2
    # 要复制的数据库
    replicate-do-db=mytest
    
    #master-host=49.4.32.91    //这些不用放在这里(看其它文章这样写的,经测试不需要)
    #master-user=repl          //这些不用放在这里
    #master-password=QFedu123! //这些不用放在这里
    #master-port=3306          //这些不用放在这里
    

     

服务器配置就这些......

==========================================

下面开始配置数据库。

配置主库:

  • 确保在主服务器上 skip_networking 选项处于 OFF 关闭状态, 这是默认值。
    show variables like '%skip_networking%';
    如果是启用的,则从站无法与主站通信,并且复制失败
  • 创建一个专门用于复制数据的用户
    CREATE USER 'repl'@'%' ;
  • 创建可复制的权限

    GRANT REPLICATION SLAVE ON *.*  TO  'repl'@'%'  identified by 'a123456';

    每个从服务器,需要使用MySQL主服务器上的用户名,和密码连接到主服务器。例如,使用用户 repl 可以从任何主机上连接到 master 上进行复制操作, 并且用户 repl 仅可以使用复制的权限。

  • 查看主库master_log_file、master_log_pos值

    show master status; -- 执行sql

     

配置从库:

  • 先确定从库同步服务已停止
    stop slave;-- 在命令行中执行
  • 配置从库与主库通信参数
    -- 在mysql中执行
    change master to
    master_host='49.4.32.91',-- 主服务器的主机名(也可以是 IP) 
    master_user='repl',-- 连接到主服务器的用户
    master_password='a123456',-- 到主服务器的密码
    master_port=3306,
    master_log_file='mysql-bin.000001',-- 这里对应主库的值(show master status出来的master_log_file值)
    master_log_pos=801;-- 这里对应主库的值(show master status出来的master_log_pos值)
  • 启动从服务器的复制线程(根据需要停止和启动,因为要测试很多次,在mysql从库中执行:stop slave和start slave)
    start slave;-- 在命令行中执行
  • 检查是否启动成功:(在从库mysql中执行)

    show slave status; -- 执行sql

    上图:

    主要看这两个值是不是yes,我一开始不是,第一个总是No,解决方法参考文章
    https://blog.csdn.net/itjackhe/article/details/105426122?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase

     主要是因为主库的master_log_file、master_log_pos值,与从库连接参数的值不一致。

 

 

   

 

最后结果:完全一致。

 

 

后续更新更多经验上来,搞熟练,搞撑(chen)抖(tou)。

 

 

好了,回家恰饭。

 

=======================[几天之后]========================

上来先说结论:这几天抽空学会了主从复制技术,目前会的模式是一主多从。20210318。

不会的时候觉得很难,会了之后觉得挺简单。按照本文来操作即可。

=======================================================

重要配置(在学会主从复制技术之前以下步骤可跳过)(暂未测试):

  • 主库配置好之后加读锁,主库加只读锁,防止在数据同步时,主库新增数据

    flush table with read lock; -- 主数据库加锁,只允许读取数据
    unlock tables;-- 主数据库恢复可写指令 (此操作可放到备份数据并记录binlog日志文件和位置时去执行)

     

  • 使用mysqldump命令进行备份数据库mysqldump -uroot -p -A -F --master-data=2|gzip > /root/rep.sql.gz

    -A 备份全部数据库

    -F 刷新二进制日志

    --master-data=2 追加二进制位置和文件输出到sql中

    gzip  将mysqldump的数据压缩,节省存储空间

    将压缩文件上传到从服务器.并导入到从库中gunzip 

  •  

 

END

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SDL大华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值