MYSQL 8 数据导出导入怎么更快 与 阻止最大权限删库

December 17, 2023
测试
测试
测试
测试
1 分钟阅读

MySQL 的数据导出导入其实从MYSQL 5.5 到 5.7 大部分采用的方法有如下几种

1 备份法,通过mydumper , mysqldump, mysqlpump 等方式将某个表的数据导出,在导入到目的端的的表种,但这样导出导入除了mydumper的速度上还比较快以外,其他mysqldump 的速度上是不敢恭维的,尤其导入数据的时候是比较慢的,并且导入数据的时候还会给复制造成压力,导致复制延迟等问题。

2 select into file and load data INFILE的方法,通过这样的方法是可以快速的将数据导入导出的。

但第二种方式的问题也是在于要使用客户端和服务器端的之间的数据流,添加服务器的负担,在大数据量的情况下,要考虑批量或者调整 group_replication_communication_max_message_size 的方法来进行限流的操作。当然还要考虑INDEX 是同时建立还是导入后在建立的问题等等。

3 整体表的卸载和加载,其实这个事情在MYSQL 5.X上就可以去做,但实际上是有一定的危险性的,而在MYSQL 8 以后整体的数据表的信息不再分别存放,FRM 文件已经是过去式,所以这样的操作就变得安全的多,同时这样的操作的速度也是最快的,避免了通过服务端将数据导入。

下面操作

1在目的端需要导入的库上创建同名的表

create table salaries (id int);

2在源端将表salaries 停止插入数据

FLUSH TABLES salaries FOR EXPORT;

3 拷贝数据到目的库

4 解锁源端的表的锁,让数据能正常插入

5 将文件import 到目的端

6 解锁目的端表

完成

看上去操作时比较方便的,但这里有几点需要注意,否则可能会酿成大祸

1 必须要使用FLUSH TABLES FOR EXPORT; 命令在源端,目的不仅仅是要阻止写入数据,并将脏页刷到数据文件中,更重要的是防止误操作 discard 将你的原表直接删除,那可是根本就找不回来的。

2 目的端的表必须和你的原表的字段数量和设置一致,可以去掉外键约束等,否则导入会失败

为什么要强调第一点,因为目前写如何快速导出MYSQL 数据的文字,我看基本上没有强调注意 discard 是直接将文件清理掉的(对于小白那是不负责的),并要操作者注意误操作会丢失元数据的问题,并且网上也有一部分人在问,我DISCARD 表后,怎么能恢复(就可见一般了)。

另外最近有人问我,他公司的开发的开发的MYSQL 数据库经常被莫名其妙的删库,虽然是测试库,但也着实要人讨厌,并且就算安装了审计也无可奈何,因为人家就是误操作了,你又能怎样, 这里教大家一个方法,让他纵使有ROOT的权限,也删除不了库。

方法就是在你要防止删库的数据文件夹下,放置一个文件,例如下面

删除会直接报错。

如果还能删除,我只能说他是“诚心诚意”的,那你该怎么和他去“真爱”,就怎么办吧

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多