数据库23000个MySQL数据库破百万的存储空间之旅(23000mysql)
数据库23000个MySQL数据库:破百万的存储空间之旅
在当今信息爆炸的时代,数据作为企业最重要的资产之一,越来越受到企业的重视。针对不同业务场景,不同大小规模的企业,一种或多种数据库管理系统(DBMS)被广为使用。MySQL作为一种开源的DBMS,在市场上也有着广泛的应用。
近日,我参与了一个项目,主要是编写一个程序,用于自动化创建MySQL数据库,模板中有175个表结构,需要创建23000个数据库实例,每个实例都需要和一个唯一的客户关联,这个项目从而成为我们MySQL存储空间之旅的起点。
一、存储空间的需求
对于存储空间的需求,我们根据创建出来的数据库规模做了一个初步的估算,单个数据库大小2MB,每个客户分配2个数据库实例,23000个数据库实例总大小约为92GB,为此我们需要确认应用部署的服务器具备足够的存储空间。根据初步的估算,我们考虑到使用AWS提供的SSD云存储,我们按需购买400GB SSD云存储硬盘,然后将其mount到我们的应用服务器(AWS EC2)上。
![image-20211105141352697](https://cdn.jsdelivr.net/gh/mffei/cdn/img/image-20211105141352697.png)
二、自动化创建MySQL数据库
我们采用Python通过sqlalchemy库与MySQL建立连接,实现自动化创建MySQL数据库实例的功能。下面是程序主要代码(省略部分异常处理语句):
`python
from sqlalchemy import create_engine
def create_database(database_name):
mysql_db = create_engine( mysql://root:password@localhost/mysql )
conn = mysql_db.connect()
conn.execute(f create database {database_name} )
conn.close()
if __name__ == __mn__ :
for i in range(1, 23001):
create_database(f db_{i}_instance_1 )
create_database(f db_{i}_instance_2 )
通过运行以上代码即可自动化创建23000个MySQL数据库实例。由于业务场景下,每个客户需要分配两个实例,因此我们需要为每个客户保留两个实例。为了方便管理,我们在实例名中加入了序号编号,并且统一为每个实例分配了相同的表结构。这样做的好处在于,每个数据库实例拥有完全相同的表结构,一旦需要进行修改和维护,就可以统一操作。同时,在对数据库实例进行备份和恢复时,也可避免由于表结构不同而导致的备份恢复失败的问题。
三、MySQL实例的备份和恢复
在企业信息化建设中,备份和恢复是必不可少的,以防数据丢失和误删。我们采用独立主从备份,即master/slave架构来进行MySQL实例的备份和恢复。
备份的主要流程如下:
1. 对MySQL数据库进行全量备份,如以下命令:
```bash mysqldump -uroot -p123456 --single-transaction --master-data=2 --databases db_1_instance_1 db_1_instance_2 /mnt/backup/db_1_instance_1_2_20211105.sql
```
其中,--single-transaction选项表示在备份时使用事务;--master-data=2表示生成一个CHANGE MASTER的命令和二进制日志文件的位置,以便在恢复期间应用二进制日志;--databases 参数表示备份的数据库列表; /mnt/backup/db_1_instance_1_2_20211105.sql表示将备份文件写入到指定的目录。
2. 将备份文件传输到备份服务器(shared storage file system)。
3. 利用shared storage file system自带的快照功能,对备份进行快照。
4. 完成备份。
而在恢复MySQL实例的流程如下:
1. 在备份服务器使用快照,恢复指定时间点的备份。
2. 将备份文件拷贝到目标服务器
3. 还原备份到目标MySQL服务器上
```bash mysql -uroot -p123456
```
4. 验证数据还原结果,检查恢复后的数据库是否和源数据库一致。
恢复完成后,可以使用以下命令校验,结果应该为:没有差异:
```bashmd5sum /mnt/backup/db_1_instance_1_2_20211105.sql
md5sum /var/lib/mysql/db_1_instance_1/*.frmmd5sum /var/lib/mysql/db_1_instance_2/*.frm
md5sum /var/lib/mysql/db_1_instance_1/*.ibdmd5sum /var/lib/mysql/db_1_instance_2/*.ibd
四、存储空间的最优化配置
针对存储空间的最优化配置,在MySQL的某些版本中,有一种叫做innodb_file_per_table的选项,它可以让MySQL为每个InnoDB表创建一个独立的数据文件。开启innodb_file_per_table后,每个InnoDB表就会生成单独的数据文件,该数据文件存储的是表中的记录。使用innodb_file_per_table,则可以优化存储管理,避免由于单个表过大而引起的存储空间浪费。
当后续需要删除或移动某露点表时,也可以通过分别操作数据文件,避免对整个数据库进行操作,在对存储空间进行最优化配置时,开启innodb_file_per_table选项的好处在于,每个表都是独立的,可以实现每个表的管理和备份,而不至于出现因为备份和管理错误导致其他表的异常问题。
五、总结
在实现23000个MySQL数据库的存储空间之旅中,我们回顾了针对存储空间的需求,如何自动化创建MySQL数据库、MySQL实例的备份和恢复,以及对存储空间的最优化配置。通过相应的依赖库和代码实现,我们最终成功地创建了23000个MySQL数据库,做到了存储空间的最优化配置,同时也全面考虑到数据备份和数据恢复的问题,并确保了恢复后的数据与原来数据的一致性。
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 数据库23000个MySQL数据库破百万的存储空间之旅(23000mysql)
相关文章
- pycharm创建mysql数据库_自学语言的步骤
- 设计MySQL数据库表设计:优化性能的关键(mysql数据库表)
- MySQL Variables max_error_count 数据库 参数变量解释及正确配置使用
- MySQL数据库备份自动化:实现脚本工具(mysql数据库备份脚本)
- MySQL:支持数据库操作的强大工具(写数据库mysql)
- MySQL数据库类型及其应用(mysql所有类型)
- 优雅命名的MySQL存储过程(mysql存储过程命名)
- MySQL性能优化:实现高效的并发连接(mysql并发连接)
- 深入学习:如何使用Bat执行MySQL命令(bat执行mysql命令)
- MySQL中插入操作获取返回主键(mysql插入返回主键)
- 深入探究!MySQL数据库的性能极限在哪里?(mysql性能极限)
- 器MySQL加入服务器:开启新的数据库之路(mysql加入服务)
- 「MySQL 数据文件迁移指南」(mysql数据文件迁移)
- MySQL中如何实现交叉查询(mysql中交叉查询)
- 深入剖析MySQL中的NoSQL数据库概念(mysql中no sql)
- 用cnd命令快速启动Mysql数据库(cnd命令启动mysql)
- MySQL数据库中的DDL操作在哪里(mysql中ddl在哪)
- 使用MySQL实现两表联合更新的方法分享(mysql 两表联合更新)
- MySQL中超屌的CID优化你的数据库(cid mysql)
- 全新CDH更换MySQL环境,重新拥抱迅速发展的数据库潮流(cdh更换mysql)
- 通过 bat 调用 MySQL 脚本实现快速数据库管理(bat调用mysql脚本)
- 数据库导入MySQL数据库Bak文件与MySQL的操作(bak怎么导入mysql)
- 解决ASP读取MySQL乱码问题(asp读取mysql乱码)
- 数据库AS3编程实现MySQL数据库交互(as3的mysql)
- 数据库用CMD快速导入MySQL数据库(cmd怎么导入mysql)
- MySQL数据库优化实践提高贴吧性能(mysql下贴吧)
- MySQL下划线大写的含义和用法(mysql下划线大写)
- MySQL数据库无法进入解决方法(mysql不能进入)
- MySQL 停止异常这些方法或许可行(mysql 不能stop)
- MySQL数据库不支持外键约束限制,需手动控制关系,考虑引用完整性问题(mysql不支持外链)