首页 > 数据库 >ubuntu实现mysql主从复制

ubuntu实现mysql主从复制

时间:2024-05-25 18:34:03浏览次数:20  
标签:主库 主从复制 log 数据库 mysql ubuntu MySQL 服务器

mysql主从复制原理:
1、当主节点的数据发生变化时,会将将其写入bin log
2、从节点间隔一定时间对bin log进行探测,若发生数据改变,则从节点生成I/O、SQL两个线程, I/o线程去读取从节点的binlog,并写到relay log
3、主节点则生成log dump线程,用来给从库I/o线程传送binlog
4、SQL线程读取relay log并执行命令,从而实现主从数据一致

设计形式:

作用:
1、数据安全:数据冗余,增强数据的可靠性。即使主服务器发生故障,从服务器也可以提供数据的备份和恢复。
2、故障恢复:主节点出现问题时,可由从节点提供服务,实现故障的快速恢复。
3、提高性能:负载均衡,配合读写分离,可以分担主服务器负载。
主从延迟:主从复制过程中,从库相对于主库的数据同步存在一定的时间滞后。
常见原因:

  1. 主从库之间的网络延迟会导致复制延迟
  2. 慢查询SQL语句,主库需执行了复杂的SQL语句,从库则需要花费更长的时间进行变更。
  3. 硬件性能差异,主从库硬件性能相差较大,导致处理数据发生差异。
  4. 主库读写压力大,当主库面临大量的读写请求时,处理复制数据的速度会受到影响。
    解决方法
  5. 确保主从库之间的网络连接稳定,增加带宽,减少网络延迟。
  6. 优化SQL语句,减少慢查询的数量。
  7. 确保主从库的硬件性能相近
  8. 优化主库的读写性能,可以使用读写分离、增加缓存等方式

部署主从复制
查看Linux版本:lsb_release -a
Description: Ubuntu 22.04.4 LTS
查看mysql版本:mysql --version
mysql Ver 8.0.36-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))
一、部署主库:apt install mysql-server
二、修改主库配置文件:vim /etc/mydql/my.cnf
添加配置项:
server-id=1 # 主数据库的唯一标识符
log-bin=mysql-bin # 启用二进制日志,用于记录主数据库的所有更新操作
binlog-do-db=dbname1 # 指定复制的数据库名称,可指定多个数据库,每行一个
binlog-do-db=dbname2
三、重启主数据库以使配置生效:systemctl restart mysql.service
四、在主数据库上创建一个用于复制的MySQL账户,并授权其从任何主机连接到主数据库。

mysql -uroot -p                                                     #登录mysql
CREATE USER 'liang'@'%' IDENTIFIED BY 'liang123';                   #创建用户并设置密码
GRANT REPLICATION SLAVE ON *.* TO 'liang'@'%' WITH GRANT OPTION;    #对用户授予权限                            
FLUSH PRIVILEGES;                                                   #刷新权限                

五、修改从节点配置文件:vim /etc/mydql/my.cnf
添加配置项:
server-id=2 # 从数据库的唯一标识符,与主数据库的server-id不同
relay-log=mysql-relay-bin # 启用中继日志,用于在从数据库上复制主数据库的操作
read-only=1 # 设置从数据库为只读,防止在从数据库上直接写入数据
六、重启从数据库以使配置生效:systemctl restart mysql.service
七、登录从库,配置从数据库连接到主数据库

mysql -uroot -p                                  #登录mysql
CHANGE MASTER TO MASTER_HOST='192.168.31.88',    #指向主库             
MASTER_USER='liang',                             #用于复制的MySQL账户
MASTER_PASSWORD='liang123',                      #密码
MASTER_LOG_FILE='mysql-bin.000005',              #主库bin log名称,主库上用SHOW MASTER STATUS查看
MASTER_LOG_POS=157;                              #主库bin log位置,主库上用SHOW MASTER STATUS查看
                      
START SLAVE;                                     #启动从库进程
SHOW SLAVE STATUS\G;                             #显示进程状态

这两个线程状态为yes就说明主从复制已经部署成功了。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

最后测试一下:在主库的test2库创建一个表并写入数据。
mysql> use test2;
Database changed
mysql> CREATE TABLE worker(
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(50) NOT NULL,
-> age INT DEFAULT 0
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into worker(id,name,age) values("001","李洋","29");
Query OK, 1 row affected (0.01 sec)

在从库查询一下该表,说明主从复制已经成功
mysql> use test2;
Database changed
mysql> select * from worker;
+----+--------+------+
| id | name | age |
+----+--------+------+
| 1 | 李洋 | 29 |
+----+--------+------+
1 row in set (0.00 sec)
mysql>

遇到的一些问题:
1、因为我是用两台虚拟机部署的,主库的配置文件(/etc/mydql/my.cnf)需要修改bind=0.0.0.0,允许用户在其他设备登录吗,不然可能出现从库复制的账号无法登录主库,I/O线程无法读取bin log,一直为no状态。
2、Slave_IO_Running: Connecting,报错为
Last_IO_Error: Error connecting to source '[email protected]:3306'. This was attempt 1/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
AI解答
这个错误信息表明在从服务器(slave)尝试连接到主服务器(master)192.168.31.88 的 MySQL 数据库时遇到了问题。具体来说,认证插件 caching_sha2_password 要求一个安全的连接,但当前的连接可能不是通过 SSL/TLS 加密的。

MySQL 8.0 引入了新的默认认证插件 caching_sha2_password,它要求当通过非本地连接进行身份验证时,必须使用 SSL/TLS 加密连接。

要解决这个问题,你可以采取以下几种方法之一:

配置 SSL/TLS 加密:
在 MySQL 主服务器和从服务器上配置 SSL/TLS 加密,以确保它们之间的连接是安全的。这通常涉及到生成 SSL 证书,并在 MySQL 配置文件中(如 my.cnf 或 my.ini)指定证书的路径。
更改认证插件:
如果你不需要最强的安全设置,或者由于某种原因无法配置 SSL/TLS,你可以考虑将主服务器上的 MySQL 用户(在这个例子中是 liang)的认证插件更改为 mysql_native_password。这可以通过在 MySQL 服务器上执行以下 SQL 语句来完成:
sql

ALTER USER 'liang'@'192.168.31.88' IDENTIFIED WITH 'mysql_native_password' BY 'your_password';  
FLUSH PRIVILEGES;

其中 'your_password' 是该用户的密码。之后,你可能需要重新配置从服务器的复制设置。
允许不安全的连接(不推荐):
虽然这不是一个推荐的做法,因为它会降低安全性,但你可以在从服务器上的 MySQL 配置文件中添加以下设置来允许不安全的连接:

ini
[mysqld]  
[replication]  
ssl-ca=/path/to/ca.pem  
ssl-cert=/path/to/server-cert.pem  
ssl-key=/path/to/server-key.pem  
ssl-cipher=DHE-RSA-AES256-SHA  

允许不安全的连接(不推荐)

require_secure_transport=OFF
但请注意,这样做会使你的连接容易受到中间人攻击(MITM)。
检查网络连接和防火墙设置:
确保主服务器和从服务器之间的网络连接没有问题,并且任何防火墙或安全组规则都允许它们之间的通信。
最后,请确保在修改任何配置或执行任何更改之前备份所有重要数据,并测试任何更改以确保它们不会破坏现有的设置或导致数据丢失。

    • [ ]

标签:主库,主从复制,log,数据库,mysql,ubuntu,MySQL,服务器
From: https://www.cnblogs.com/larks-islands/p/18212752

相关文章

  • 【转】centos7.9源码安装mysql5.7.44
    原文:https://blog.csdn.net/SeeYouGoodBye/article/details/1352314511、环境介绍centos7.9mysql5.7.44boost1.59.0注意:这里的编译版本mysql5.7.44和boost1.59.0是有依赖的,建议使用相同版本2、安装编译要用的依赖软件yuminstall-ygccgcc-c++cmakelibaio-develncu......
  • ubuntu24.04 安装 cupy
    概述我的cuda版本是12x的,对齐版本,故cupy也是12x版本,12代表cuda大的版本号,x代表小的版本号可以不同,用一个变量x代表。cupy依赖CUDAToolkit12.x,在ubuntu24.04下,它的名字是:nvidia-cuda-toolkit,使用aptshow查看一下软件的版本:(torch)logic@PC:~$aptsh......
  • 计算云上对mysql源码debug
    前准备vscode(安装remotedev插件)、mysql源码、c/c++、安装cmake、安装gccmysql源码:gitclonehttps://github.com/mysql/mysql-server.gitcmake安装:sudoyuminstallcmake3查看cmake版本:cmake--version安装gcc:sudoyuminstallgcc在计算云上编译mysql1、配置(进入m......
  • 爬虫-Python操作MySQL数据库
    Python操作MySQL数据库1、安装pipinstallpymysql2、连接数据库使用connect函数创建连接对象,此连接对象提供关闭数据库、事务提交、事物回滚等操作。importpymysqlconn=pymysql.connect(host='127.0.0.1',user='xxx',password='xxxx',port=3306,......
  • mysql多实例创建
    mysql数据库(DBMS+数据库)系统:rock8.8mysql:mariabd-server10.3前提:关闭SElinux关闭防火墙时间同步安装mariabdyum-yinstallmariadb-server准备三个实例的目录mkdir-pv/mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}生成数据文件mysql_install_db--user=......
  • docker安装MySQL8.0.35主从复制(实战保姆级)
    很久没有记录了,今天有时间就记录一下最近安装遇到的问题 liunx安装docker这个是前提,就不多过述1准备两台服务器10.104.13.13910.104.13.1402确保liunx安装的docker正常运行的ps:最好提前关闭防火墙或者提前开放对应端口不然同步会失败的关闭防火墙后记得重启docker......
  • 等保三级-MySQL 加固
    1、身份鉴别要求:建议身份密码登录,身份标识具有唯一性,身份鉴别信息具有复杂度要求,密码长度最少为8位,密码由数字、字母大小写、特殊符号组成、并设置定期更换,更换时间最长位90天(1)查看所有用户:selectuser,hostfrommysql.user;(2)查看密码复杂度插件select*frommysql......
  • mysql-查询
    连接查询内连接:相当于查询A、B交集部分数据外连接:左外连接:查询左表所有数据,以及两张表交集部分数据右外连接:查询右表所有数据,以及两张表交集部分数据自连接:当前表与自身的连接查询,自连接必须使用表别名子查询内连接内连接查询的是两张表交集部......
  • Springboot计算机毕业设计信息学院网络工程党支部小程序【附源码】开题+论文+mysql+程
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,党建工作也需要与时俱进,利用信息技术手段提升工作效率和影响力。信息学院网络工程党支部作为学院党建工作的前沿阵地,面临着如......
  • Python筑基之旅-MySQL数据库(三)
    目录一、数据库操作1、创建1-1、用mysql-connector-python库1-2、用PyMySQL库1-3、用PeeWee库1-4、用SQLAlchemy库2、删除2-1、用mysql-connector-python库2-2、用PyMySQL库2-3、用PeeWee库2-4、用SQLAlchemy库二、数据表操作1、创建1-1、用mysql-connector-pyth......