注意:如果出现如下错误:
mysql> change master to master_host='master', master_user='test', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=589, master_connect_retry=30;ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '' first.
执行如下:STOP SLAVE
mysql> STOP SLAVE
再执行一次,切换当前服务的状态,使其能够连接上master服务器的操作 。
然后再开启主从复制:
start slave;
查看从服务器的连接状态:
mysql> show slave statusG;*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: masterMaster_User: testMaster_Port: 3306Connect_Retry: 30Master_Log_File: mysql-bin.000003Read_Master_Log_Pos: 589Relay_Log_File: da8ccfefbce6-relay-bin.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-bin.000003Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 589Relay_Log_Space: 534Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id: 1Master_UUID: ea851c98-5553-11eb-a496-0242ac110003Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position: 0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version: 1 row in set (0.00 sec)
主要看如下2个指标为true,即没有问题:
文章插图
3、测试主从在主mysql上执行如下语句:
create database test;create table tt(id int, name varchar(255));create table ss(id int, name varchar(255));insert into tt(id, name) value (1, 'Free');insert into ss(id, name) value (1, 'KaKa');
从服务mysql上查看:mysql> use test;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> show tables;+----------------+| Tables_in_test |+----------------+| ss|| t_user|| tt|+----------------+3 rows in set (0.00 sec)mysql> select * from ss;+------+------+| id| name |+------+------+|1 | KaKa |
成功 。二、springboot实现读写分离本文的读写分离用dynamic-datasource-spring-boot-starter的插件来完成的,具体的介绍可以看:
https://github.com/baomidou/dynamic-datasource-spring-boot-starter
dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器 。特性:
- 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式 。
- 支持数据库敏感配置信息 加密 ENC() 。
- 支持每个数据库独立初始化表结构schema和数据库database 。
- 支持 自定义注解 ,需要继承DS(3.2.0+) 。
- 提供对Druid,Mybatis-Plus,P6sy,Jndi的快速集成 。
- 简化Druid和HikariCp配置,提供 全局参数配置 。配置一次,全局通用 。
- 提供 自定义数据源来源 方案 。
- 提供项目启动后 动态增加移除数据源 方案 。
- 提供Mybatis环境下的 纯读写分离 方案 。
- 提供使用 spel动态参数 解析数据源方案 。内置spel,session,header,支持自定义 。
- 支持 多层数据源嵌套切换 。(ServiceA >>> ServiceB >>> ServiceC) 。
- 提供对shiro,sharding-jdbc,quartz等第三方库集成的方案,注意事项和示例 。
- 提供 基于seata的分布式事务方案 。 附:不支持原生spring事务 。
- 提供 本地多数据源事务方案 。 附:不支持原生spring事务 。
1、引入dynamic-datasource-spring-boot-starter 。
<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>${version}</version></dependency>
2、配置数据源 。# 服务端口server.port=8099# 服务名spring.application.name=more-datasourse# 环境设置:dev、test、prodspring.profiles.active=dev# mysql数据库连接spring.datasource.dynamic.primary=mysqlspring.datasource.dynamic.datasource.mysql.username=rootspring.datasource.dynamic.datasource.mysql.password=rootspring.datasource.dynamic.datasource.mysql.driver-class-name=com.mysql.jdbc.Driverspring.datasource.dynamic.datasource.mysql.url=jdbc:mysql://192.168.197.24:23306/test?useSSL=false&serverTimezone=UTCspring.datasource.dynamic.datasource.slave_1.username=rootspring.datasource.dynamic.datasource.slave_1.password=rootspring.datasource.dynamic.datasource.slave_1.driver-class-name=com.mysql.jdbc.Driverspring.datasource.dynamic.datasource.slave_1.url=jdbc:mysql://192.168.197.24:23307/test?useSSL=false&serverTimezone=UTCspring.datasource.max-idle=10spring.datasource.max-wait=10000spring.datasource.min-idle=5spring.datasource.initial-size=5#mybatis日志mybatis-plus.configuration.log-impl=org.Apache.ibatis.logging.stdout.StdOutImpl#返回json的全局时间格式spring.jackson.date-format=yyyy-MM-dd HH:mm:ss#spring.jackson.time-zone=GMT+8
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 10分钟快速搭建小程序管理后台,云开发CMS搭建可视化后台
- MySQL如何删除重复数据
- reGeorg搭建HTTP隧道和流量分析
- MySQL运行机制
- MySQL5.7数据库主从架构部署,你再也不用去问度娘了
- MySQL高可用架构的演进
- CENTOS Mysql5.7数据库自动安装脚本
- 怎样用3分钟搭建 Python 人脸识别系统
- 做好mysql运维,必须熟练掌握备份和恢复,实战一次不行多来几次
- MySQL还能实现分布式锁?