当前位置: 首页 > java >正文

MySQL主从数据库搭建

学习了如何搭建MySQL主从数据库,为加深印象,写了这篇博客作为总结。本篇文章使用的是MySQL8.0,主库使用Windows操作系统,从库使用Linux。

1. 数据库配置

在主库对MySQL进行配置。如果是Linux,需配置my.cnf或mysql.cnf,如果是Windows,需在C:\ProgramData\MySQL\MySQL Server 8.0配置my.ini。
在配置文件的[mysqld]下添加如下配置:

server-id = 1	#如已经有该配置,则不用再次添加。和从库的server-id不同即可。
log-bin = mysql-bin
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON

从库同样在配置文件里添加以下内容:

server-id = 2
relay-log = mysql-relay-bin
read_only = 1
gtid_mode = ON
enforce_gtid_consistency = ON
#跳过 mysql 系统库的复制
replicate-ignore-db = mysql
replicate-ignore-db = sys
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema

配置完成后重启MySQL服务

2. 创建复制用户

创建并分配用户权限

CREATE USER 'repl_user'@'%' IDENTIFIED BY 'StrongPassword!';
GRANT REPLICATION SLAVE, REPLICATION CLIENT, REPLICATION_APPLIER 
ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;

修改用户认证方式

ALTER USER 'repl_user'@'%' 
IDENTIFIED WITH mysql_native_password 
BY 'StrongPassword!';
FLUSH PRIVILEGES;

注:认证方式修改只需在主库进行(从库连接主库时使用)

3. 主库状态查询

主库登录MySQL,执行SHOW MASTER STATUS;查询并记录输出中的 File 和 Position,稍后从库需要用到。

4.ssl配置

在C:\ProgramData\MySQL\MySQL Server 8.0\Data查询是否有ca.pem、ca-key.pem、server-key.pem和server-cert-pem。如果没有,需要使用openssl进行生成。
在主库配置文件的[mysqld]下添加以下内容:

ssl-ca = ca.pem
ssl-cert = server-cert.pem
ssl-key = server-key.pem

5. 导入数据库,开启复制线程

在主库登录MySQL,执行mysqldump -u root -p --single-transaction --master-data=2 --routines --triggers --all-databases > full_backup.sql导出数据库文件。发送到Linux虚拟机后,执行mysql -u root -p < full_backup.sql进行导入。

6. 从库配置

在linux登录MySQL,执行以下命令:

CHANGE REPLICATION SOURCE TOSOURCE_HOST = '192.168.8.100',		#填写主库的实际ip,建议使用固定ipSOURCE_USER = 'repl_user',SOURCE_PASSWORD = 'StrongPassword!',SOURCE_LOG_FILE = 'mysql-bin.000002',		#第三步查询到的fileSOURCE_LOG_POS = 1330,		#第三步查询到的positionSOURCE_SSL = 1;	#启用ssl

导入完成,执行START REPLICA;开启复制线程即可。
开启后可执行SHOW REPLICA STATUS\G;查询从库配置的具体状态。正常情况下应该没有error信息,Replica_IO_Running和Replica_SQL_Running都是Yes。

http://www.xdnf.cn/news/13825.html

相关文章:

  • VSCode占C盘内存太大,如何处理
  • 双目视觉关键原理
  • 利用IS模型评估生成的图像质量
  • 解析XML发票:每一行标签的含义
  • GPIO简介(GPIO输出)
  • 创新综合实践 水果商城管理系统
  • 【Java工程师面试全攻略】Day8:高并发系统设计实战
  • python在容器内克隆拉取git私有仓库
  • 基于RK3588的KVM(Keyboard, Video, Mouse)远程传输方案
  • DQS和DQS_c
  • 进程间通信详解(三):Linux进程信号深度解析
  • 25年春招:字节跳动客户端开发二面总结
  • 【阿里巴巴 x 浙江大学】信息与交互设计 - 交互设计原则与思维
  • Vulkan学习笔记3—物理设备-逻辑设备-窗口表面-交换链-图像视图
  • ​约束催生自由,分离滋养创造——建造者模式有感
  • /proc/<pid>/maps文件格式详解
  • Git 常用总结
  • Unity | AmplifyShaderEditor插件基础(第十集:shader的基本属性+火焰制作-上)
  • 使用cmake安装faiss-GPU.so(无网或者内网情况下)
  • 《网络安全与防护》知识点复习
  • 多通道信号采集分析系统 - 01 功能分解与采样子系统
  • 体育赛事直播平台需要有哪些数据?
  • 通用人工智能离我们还有多远?从认知模型到大模型的深度解析
  • JavaScript中声明变量的关键字const/let/var区别
  • 13-Linux启动流程和内核管理自我总结
  • python根据图片路径获取文件后缀名
  • Spring Boot Actuator 健康信息
  • OpenLayers 动画
  • 零基础RT-thread第一节:串口通信UART
  • C语言——指针