MySQL Mysqldump 一致性备份与大数据库备份 与 PG MYSQL 到底谁是NO.1
这开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内,可以解决你的问题。加群请联系 liuaustin3 ,(共1830人左右 1 + 2 + 3 + 4 +5) 4群(340+ 到350将关闭自由申请),另欢迎 OpenGauss 的技术人员加入。
我其实是想郑重其事的回答以下在上个礼拜分享会后,一个人最后对我的一个问题,问题是, PG 和 MYSQL 到底那个是 NO.1 ,当时我的语气不是很好,因为我觉得很无聊,在此表示道歉,但观点我是不变的。
作为一个技术人员,不是对自己的技术有要求,而是成天的讨论 PG 第一还是 MYSQL 第一,我不觉得是光彩的事情,这只能说明一件事情,你无能,提出这个问题的人,很可能在技术上是 physically challenged individual.
你在问这个问题的时候,其实你在告诉别人,这两个数据库你必然有一个你不会,不管是PG 或是 MYSQL 。为什么不能提高自己,两个都会呢?我想那时的你,不会在提出这样问题,因为你有自信,告诉任何人,"Who cares about which one is NO.1? I can operate both of them." That's all.
——————————————————————————————
技术正文
道完歉,最近在重新的review PostgreSQL和MySQL在内置备份这个层面的功能,pg_dump , mysqldump ,实话实说mysqldump 的确无法和PG的 pg_dump 的功能比较。这主要是从这几个方面来进行
当然MySQL 的MySQLDUMP从早期的5.0中,当时我使用的是是没有 --single-transaction 的这个一致性的支持是到了mysql5.1.1.0中才有的功能。当时只能只用 --lock-tables 来进行数据库的备份。
在备份中MySQL 是要通过 --single-transaction 来进行数据库的备份,如果不使用这个参数,那么你对数据库的操作,只能要导出,不能叫备份,因为此时你没有这个参数的加持,你的备份中的表输出的数据都不在一个时间点,所以没有这个参数的备份是失败的。
这里我们简单用一个备份,并跟踪整个备份的过程来看看到底备份一个数据库中经历了什么。
2023-12-30T15:22:50.379211-00:00 8 Connect root@localhost on using Socket<br>2023-12-30T15:22:50.379506-00:00 8 Query /*!40100 SET @@SQL_MODE='' */<br>2023-12-30T15:22:50.379631-00:00 8 Query /*!40103 SET TIME_ZONE='+00:00' */<br>2023-12-30T15:22:50.379739-00:00 8 Query /*!80000 SET SESSION information_schema_stats_expiry=0 */<br>2023-12-30T15:22:50.379925-00:00 8 Query SET SESSION NET_READ_TIMEOUT= 86400, SESSION NET_WRITE_TIMEOUT= 86400<br>2023-12-30T15:22:50.380446-00:00 8 Query SHOW VARIABLES LIKE 'gtid_mode'<br>2023-12-30T15:22:50.391288-00:00 8 Query FLUSH /*!40101 LOCAL */ TABLES<br>2023-12-30T15:22:50.391924-00:00 8 Query FLUSH TABLES WITH READ LOCK<br>2023-12-30T15:22:50.392361-00:00 8 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ<br>2023-12-30T15:22:50.392899-00:00 8 Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */<br>2023-12-30T15:22:50.393304-00:00 8 Query SHOW BINARY LOG STATUS<br>2023-12-30T15:22:50.393518-00:00 8 Query UNLOCK TABLES<br>2023-12-30T15:22:50.393714-00:00 8 Query SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE ENGINE = 'ndbcluster' AND FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE ENGINE = 'ndbcluster' AND FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('test'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE, TOTAL_EXTENTS, INITIAL_SIZE ORDER BY LOGFILE_GROUP_NAME<br>2023-12-30T15:22:50.404327-00:00 8 Query SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('test')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME<br>2023-12-30T15:22:50.406627-00:00 8 Query SHOW VARIABLES LIKE 'ndbinfo_version'<br>2023-12-30T15:22:50.411160-00:00 8 Init DB test<br>2023-12-30T15:22:50.411488-00:00 8 Query SAVEPOINT sp<br>2023-12-30T15:22:50.411854-00:00 8 Query show tables<br>2023-12-30T15:22:50.416006-00:00 8 Query show table status like 'test'<br>2023-12-30T15:22:50.417961-00:00 8 Query SET SQL_QUOTE_SHOW_CREATE=1<br>2023-12-30T15:22:50.418353-00:00 8 Query SET SESSION character_set_results = 'binary'<br>2023-12-30T15:22:50.418666-00:00 8 Query show create table `test`<br>2023-12-30T15:22:50.426797-00:00 8 Query SET SESSION character_set_results = 'utf8mb4'<br>2023-12-30T15:22:50.427208-00:00 8 Query show fields from `test`<br>2023-12-30T15:22:50.431178-00:00 8 Query show fields from `test`<br>2023-12-30T15:22:50.432739-00:00 8 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `test`<br>2023-12-30T15:22:50.433439-00:00 8 Query SET SESSION character_set_results = 'binary'<br>2023-12-30T15:22:50.433681-00:00 8 Query use `test`<br>2023-12-30T15:22:50.433969-00:00 8 Query select @@collation_database<br>2023-12-30T15:22:50.434119-00:00 8 Query SHOW TRIGGERS LIKE 'test'<br>2023-12-30T15:22:50.439390-00:00 8 Query SET SESSION character_set_results = 'utf8mb4'<br>2023-12-30T15:22:50.439750-00:00 8 Query SET SESSION character_set_results = 'binary'<br>2023-12-30T15:22:50.440197-00:00 8 Query SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"') FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = 'test' AND TABLE_NAME = 'test'<br>2023-12-30T15:22:50.441997-00:00 8 Query SET SESSION character_set_results = 'utf8mb4'<br>2023-12-30T15:22:50.442242-00:00 8 Query ROLLBACK TO SAVEPOINT sp<br>2023-12-30T15:22:50.442521-00:00 8 Query RELEASE SAVEPOINT sp<br>