MySQL主从复制,读写分离,分库分区等

为什么阿里巴巴《Java开发手册》不建议使用物理外键?使用物理外键会带了什么问题?MySQL主从复制,读写分离,分库分区等

在使用外键的情况下,每次修改数据都需要去另外一个表检查数据,需要获取额外的锁。若是在高并发大流量事务场景,使用外键更容易造成死锁。

数据库物理删除和逻辑删除有

物理删除=永久删除,节省存储空间

逻辑删除=数据记录被删除, 但数据本身依然存在

日常开发使用逻辑删除,以防后期会用到数据又恢复不了的情况。

内连接和外连接有什么区别?什么是自连接?

内连接仅返回表之间匹配的数据

外连接返回表之间匹配和不匹配的数据

自连接是一种特殊的连接操作,它将表与自身连接,通常用于表中记录间的比较或关系查询

创建索引时会锁表吗?

Lnnodb不会,

mylsam会,进行时,可读不可写

drop、truncate 和 delete 的区别

drop删除整个数据库对象,如表,视图,索引,快

truncate 删除表中所有数据行,不支持where语句

delete 逐行删除表中数据行。

短时间提高 MySQL 性能的方法

使用索引查询,避免全表查询,优化查询语句。

什么是主备延迟,如何解决延迟问题。

主备延迟,说明备数据库复制主数据库文件滞后。未能及时更新数据实现同步

实现时间同步,优化网络降低延迟。使用多个备数据库实现均衡负载,减少单个压力。

实操题:
以下配置全部基于8.0.26

下载mysql (8.0.26版本)

下载最新首先安装yum 源必须是8.0.26的。不指定mysql源默认下载最新的。

卸载现有的mysql和mariadb依赖包,否则下载8.0.26rpm包会报错,因为版本冲突。报错内容如下

[root@caihua ~]# sudo rpm -ivh mysql-community-libs-8.0.26-1.el7.x86_64.rpm 警告:mysql-community-libs-8.0.26-1.el7.x86_64.rpm: 头V3 DSA/SHA256 Signature, 密钥 ID 5072e1f5: NOKEY 错误:依赖检测失败: mysql-community-client-plugins = 8.0.26-1.el7 被 mysql-community-libs-8.0.26-1.el7.x86_64 需要

以下 是卸载完现有的依赖包之后再再下载rpm包,显示成功。查看版本号也符合要求。

MySQL主从复制,读写分离,分库分区等

登录到mysql查看版本信息。

MySQL主从复制,读写分离,分库分区等

使用冷备将从数据库的数据保存到/data目录并测试删除然后恢复

冷备需要先关闭mysql服务,适合线下服务器

MySQL主从复制,读写分离,分库分区等

ls查看打包成功。

MySQL主从复制,读写分离,分库分区等

删除mysql存储数据

MySQL主从复制,读写分离,分库分区等

删除完之后进行恢复,

MySQL主从复制,读写分离,分库分区等

恢复后登录mysql,显示正常。MySQL主从复制,读写分离,分库分区等

使用mysqldump测试将tarena库进行备份,然后测试删除与恢复

看一下mysql有没有tarena库,没有则创建,这边我是新建了一个tarena库,并在里面建了一个为benben的表。

MySQL主从复制,读写分离,分库分区等

MySQL主从复制,读写分离,分库分区等

MySQL主从复制,读写分离,分库分区等

删除terena库

MySQL主从复制,读写分离,分库分区等

已经删除terena库,重新恢复提示错误NO database selected,没有该库,所以我们这新建一个容纳恢复的库。

MySQL主从复制,读写分离,分库分区等

这边显示导入成功,第一次导入失败,提示不允许再命令行输入密码,所以我就输入-p,密码后输入,发现可以恢复,进入到数据库中,发现terena的库数据已恢复。

MySQL主从复制,读写分离,分库分区等 MySQL主从复制,读写分离,分库分区等

实现mysql的全量备份及增量备份

全量备份如下,安装第三方工具的时候,安装过程可能会包密钥不适应,不适应的情况下去mysql仓库gppchek=0,以下是解决完之后没有报错,安装依赖/解压源码,移动并改名,/把命令添加到系统环境变量

MySQL主从复制,读写分离,分库分区等

MySQL主从复制,读写分离,分库分区等

这边可以看到已经备份完成。

MySQL主从复制,读写分离,分库分区等

2. 以下是增量备份。实现增量备份之前必须有新产生的数据,以完成增量备份,现在需要输入新的数据,

MySQL主从复制,读写分离,分库分区等

下图可以看见增量备份已经完成,备份过程原图较长,取首尾图方便看,每当产生新的数据,可依此类推,只需重新指定新的增量备份目录。

MySQL主从复制,读写分离,分库分区等

MySQL主从复制,读写分离,分库分区等

安装两个mysql,实现主从同步、查看从库同步的情况

在master启用binlog日志,使其slave可以复制。在slave也需server-id

MySQL主从复制,读写分离,分库分区等

在主上创建一个新的用户,并授权复制。MySQL主从复制,读写分离,分库分区等

在slave上指定master服务器信息,开启slave

MySQL主从复制,读写分离,分库分区等
MySQL主从复制,读写分离,分库分区等

有点小问题,这边显示我的用户身份认证有问题,根据提示我取master修改用户认证。MySQL主从复制,读写分离,分库分区等

搞了十几分钟。记录一下解决过程😫

Master新建的用户,用户 'wgt' 目前使用的是 'caching_sha2_password' 身份验证插件。要更改为 'mysql_native_password'

MySQL主从复制,读写分离,分库分区等

可以看到直接修改会报错。需要先删除这个用户。

MySQL主从复制,读写分离,分库分区等

删除先看用户拥有的权限,在删除,这边删除成功。

MySQL主从复制,读写分离,分库分区等

重新建一个wgt用户,并修改身份认证mysql_native_password ,并授权,再更新!!!

此时master的二进制文件会改变,需要重新查看,以便salve进行指定master。

MySQL主从复制,读写分离,分库分区等

然后再slave进行指定master

MySQL主从复制,读写分离,分库分区等

再查看一下信息,显示成功。接下来修改master库,看slave能否同步。

MySQL主从复制,读写分离,分库分区等

在主新建一个maomao库,在slave进行查看,实现同步成功

MySQL主从复制,读写分离,分库分区等 MySQL主从复制,读写分离,分库分区等

使用mycat实现读写分离

安装mycat软件,定义客户端连接mycat,用户名改成mycat

MySQL主从复制,读写分离,分库分区等

数据库服务器,用户名改一下以防冲突记混

MySQL主从复制,读写分离,分库分区等

根据mycat定义的数据库配置,mysql添加相应的用户

MySQL主从复制,读写分离,分库分区等

启动mycat,启动后需要十几秒,才能看到端口开启成功。

MySQL主从复制,读写分离,分库分区等

登录mycat服务,正常访问。

MySQL主从复制,读写分离,分库分区等

创建数据源

MySQL主从复制,读写分离,分库分区等

MySQL主从复制,读写分离,分库分区等

查询显示一下数据源,与刚才配置的信息吻合。没有问题

MySQL主从复制,读写分离,分库分区等MySQL主从复制,读写分离,分库分区等

添加的数据源以文件的形式保存在安装目录下

MySQL主从复制,读写分离,分库分区等

在master新建用户,slave可以看到新建用户

MySQL主从复制,读写分离,分库分区等

MySQL主从复制,读写分离,分库分区等

创建集群,查看集群信息

MySQL主从复制,读写分离,分库分区等

创建的集群以文件的形式保存在目录下

MySQL主从复制,读写分离,分库分区等

修改master负责写访问。SLAVE负责读访问。

MySQL主从复制,读写分离,分库分区等 MySQL主从复制,读写分离,分库分区等

 

修改master,salver策略

MySQL主从复制,读写分离,分库分区等

发现重启不了,查看日志说叫我master装一个用户并授权,

MySQL主从复制,读写分离,分库分区等

在mster装完就可以启动了MySQL主从复制,读写分离,分库分区等

测试配置MySQL主从复制,读写分离,分库分区等 指定xiaoxiao库使用集群

MySQL主从复制,读写分离,分库分区等

连接mycat服务建表插入记录

MySQL主从复制,读写分离,分库分区等

在从服务器本机插入记录,数据仅在从服务器有,主服务器没有MySQL主从复制,读写分离,分库分区等

主服务器数据不变,日志偏移量不不变

MySQL主从复制,读写分离,分库分区等 客户端连接mycat服务读/写数据MySQL主从复制,读写分离,分库分区等

MySQL主从复制,读写分离,分库分区等

在主服务器查看数据和日志偏移量

MySQL主从复制,读写分离,分库分区等

在客户端查看记录

MySQL主从复制,读写分离,分库分区等

可选题:实现分库分表

创建多个分片数据库

MySQL主从复制,读写分离,分库分区等

在每个分片数据库中分片表,表结构相同

MySQL主从复制,读写分离,分库分区等

简单示例:没有应用进行连接。

假设Java应用程序连接数据库,假设使用jdbc连接数据库,需要配置相应的数据库连接信息,分片索引,id计算哈希,模拟数据路由。查询,查询结果,处理数据,输出数据。

import java.sql.*;

public class ShardTest {

public static void main(String[] args) {

// 数据库连接信息

String url = “jdbc:mysql://localhost:3306/shard_0”;

String user = “username”;

String password = “password”;

// 根据用户ID计算哈希值,模拟数据路由

int userId = 123;

int shardIndex = userId % 2; // 假设有两个分片

// 根据分片索引选择对应的分片库

url = “jdbc:mysql://localhost:3306/shard_” + shardIndex;

try (Connection conn = DriverManager.getConnection(url, user, password);

Statement stmt = conn.createStatement()) {

// 执行 SQL 查询

String query = “SELECT * FROM user WHERE id = ” + userId;

ResultSet rs = stmt.executeQuery(query);

// 处理查询结果

while (rs.next()) {

// 处理每一行数据

int id = rs.getInt(“id”);

String name = rs.getString(“name”);

// 输出数据

System.out.println(“ID: ” + id + “, Name: ” + name);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...