• mysql主从备份


    今天恰好关注的公号推送了这个内容,参照着和网上相关资料来一遍。

    公号地址:JAVA架构师宝典

    mysql的备份是mysql日志(binlog)的复制。

    开始操作:

    首先创建两个mysql实例。

    在数据库1中修改my.cnf配置文件:

    添加以下代码

    1. [mysqld]
    2. log-bin=mysql-bin #[必须]启用二进制日志
    3. server-id=100 #[必须]服务器唯一ID

    在数据库2中修改相同位置配置文件:

    1. [mysqld]
    2. server-id=201 #[必须]服务器唯一ID

    两个数据库配置好了。接下来是数据库中的配置操作了。

    首先配置数据库1:

    创建同步用户,释放远程登录权限,修改密码加密方式(使用的是mysql8.0,加密方式变更了)。

    1. #创建用户
    2. CREATE USER 'masterDb' @'%' IDENTIFIED BY 'Master@123456';
    3. #启用复制用户
    4. GRANT REPLICATION SLAVE ON *.* TO 'masterDb' @'%';
    5. #查看密码加密方式
    6. SELECT plugin FROM `user` where user = 'masterDb';
    7. #由于是caching_sha2_password加密方式,修改为了->>>mysql_native_password
    8. ALTER USER 'masterDb'@'%' IDENTIFIED WITH mysql_native_password BY 'Master@123456';
    9. #刷新变更
    10. flush privileges;
    11. #查看当前状态
    12. show master status;
    13. #File==mysql-bin.000001 Position=1954

    状态得到文件名和位置就配置完成了。

    接下来配置数据库2:

    1. #停用从库配置
    2. stop slave;
    3. #设置主库地址和同步位置
    4. change master to master_host='数据库1的IP',master_user='masterDb',master_password='Master@123456',master_log_file='mysql-bin.000001',master_port=3306,master_log_pos=1954;
    5. #开启从库配置
    6. start slave;

    数据库2配置完成。停用的操作是因为。配置一直有问题一直修改所以保留下这个语句。

    验证操作为

    1. #Slave_IO_running=yes
    2. #Slave_SQL_running=yes
    3. show slave status;

    当以上两个参数都为yes即为配置完成。也可参照Slave_SQL_Running_State。

    有问题这个参数会给出错误提示,非常的人性化。

    Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates

    接下来在项目中使用的测试:

    pom依赖

    1. <dependency>
    2. <groupId>org.apache.shardingspheregroupId>
    3. <artifactId>sharding-jdbc-spring-boot-starterartifactId>
    4. <version>4.0.0-RC1version>
    5. dependency>

    spring配置

    1. #数据源
    2. spring:
    3. shardingsphere:
    4. datasource:
    5. names: master,slave
    6. #主库
    7. master:
    8. type: com.alibaba.druid.pool.DruidDataSource
    9. driver-class-name: com.mysql.cj.jdbc.Driver
    10. url: jdbc:mysql://192.168.2.3:3307/springboot?characterEncoding=UTF-8
    11. username: root
    12. password: admin
    13. #从库
    14. slave:
    15. type: com.alibaba.druid.pool.DruidDataSource
    16. driver-class-name: com.mysql.cj.jdbc.Driver
    17. url: jdbc:mysql://192.168.2.3:3308/springboot?characterEncoding=UTF-8
    18. username: root
    19. password: admin
    20. masterslave:
    21. #读写分离配置,设置负载均衡的模式为轮询
    22. load-balance-algorithm-type: round_robin
    23. #最终的数据源名称
    24. name: dataSource
    25. #主库数据源名称
    26. master-data-source-name: master
    27. #从库数据源名称列表,多个逗号分隔
    28. slave-data-source-names: slave
    29. props:
    30. sql:
    31. #开启SQL显示,默认false
    32. show: true
    33. # 覆盖注册bean,后面创建数据源会覆盖前面创建的数据源
    34. main:
    35. allow-bean-definition-overriding: true

    修改完配置后测试。

    贴上我的运行日志:

    数据插入日志

    1. 22:16:50.045 logback [http-nio-8080-exec-5] INFO
    2. p.mpc.springboot.filter.CommonFilter - requestURI = /springboot/test/addUser
    3. 22:16:50.046 logback [http-nio-8080-exec-5] DEBUG
    4. p.m.s.one.mapper.UserMapper.addUser - ==> Preparing: INSERT INTO test_user(userid, username, password, createtime, updatetime) VALUES (?, ?, ?, ?, ?)
    5. 22:16:50.046 logback [http-nio-8080-exec-5] INFO
    6. ShardingSphere-SQL - Rule Type: master-slave
    7. 22:16:50.046 logback [http-nio-8080-exec-5] INFO
    8. ShardingSphere-SQL - SQL: INSERT INTO test_user(userid, username, password, createtime, updatetime)
    9. VALUES (?, ?, ?, ?, ?) ::: DataSources: master
    10. 22:16:50.047 logback [http-nio-8080-exec-5] WARN
    11. c.a.d.pool.DruidAbstractDataSource - discard long time none received connection. , jdbcUrl : jdbc:mysql://192.168.2.3:3307/springboot?characterEncoding=UTF-8, version : 1.2.8, lastPacketReceivedIdleMillis : 91196
    12. 22:16:50.060 logback [http-nio-8080-exec-5] DEBUG
    13. p.m.s.one.mapper.UserMapper.addUser - ==> Parameters: 2c4c818d-f465-4285-ae4b-462a64f4f13d(String), mpc2(String), mpc123(String), 2022-09-12 22:16:50.046(Timestamp), 2022-09-12 22:16:50.046(Timestamp)
    14. 22:16:50.061 logback [http-nio-8080-exec-5] DEBUG
    15. p.m.s.one.mapper.UserMapper.addUser - <== Updates: 1

    数据查询日志

    1. 22:18:07.433 logback [http-nio-8080-exec-8] INFO
    2. p.mpc.springboot.filter.CommonFilter - requestURI = /springboot/test/getAllUser
    3. 22:18:07.434 logback [http-nio-8080-exec-8] DEBUG
    4. p.m.s.o.mapper.UserMapper.getAllUser - ==> Preparing: SELECT * FROM test_user
    5. 22:18:07.434 logback [http-nio-8080-exec-8] INFO
    6. ShardingSphere-SQL - Rule Type: master-slave
    7. 22:18:07.434 logback [http-nio-8080-exec-8] INFO
    8. ShardingSphere-SQL - SQL: SELECT *
    9. FROM test_user ::: DataSources: slave
    10. 22:18:07.435 logback [http-nio-8080-exec-8] WARN
    11. c.a.d.pool.DruidAbstractDataSource - discard long time none received connection. , jdbcUrl : jdbc:mysql://192.168.2.3:3308/springboot?characterEncoding=UTF-8, version : 1.2.8, lastPacketReceivedIdleMillis : 153220
    12. 22:18:07.448 logback [http-nio-8080-exec-8] DEBUG
    13. p.m.s.o.mapper.UserMapper.getAllUser - ==> Parameters:
    14. 22:18:07.449 logback [http-nio-8080-exec-8] DEBUG
    15. p.m.s.o.mapper.UserMapper.getAllUser - <== Total: 3

    根据日志的打印结果可以得到使用的是主库备库。

  • 相关阅读:
    腾讯云5年服务器2核4G和4核8G配置租用价格表
    概率论之巴拿赫的火柴盒问题
    React Hooks
    Python - GFPGAN + MoviePy 提高人物视频画质
    [第六篇]——云服务器
    C++——智能指针
    windows中关闭占用文件的程序
    Rocky/GNU之Zabbix部署(3)
    入职芯片开发部后,每天摸鱼之外的时间我们要做些什么呢
    [go 面试] 构建高效微服务通信:选择合适的通信方式
  • 原文地址:https://blog.csdn.net/weixin_38643688/article/details/126822272