Kno*_*uch 1 backup restore mysql
我正在 MacOS 上运行的 16 GB RAM MySQL 上恢复 26GB mysql 转储文件。
首先我尝试像这样恢复mysql备份
mysql -ufoo -pbar foo < foo.dump
Run Code Online (Sandbox Code Playgroud)
这导致 mySQL 崩溃,因为 foo.dump 包含许多非常有趣的国际字符,并且上面的命令没有处理编码。
所以我尝试了
mysql -uroot -p --default-character-set=utf8 foo
mysql> SET names 'utf8'
mysql> SOURCE foo.dump
Run Code Online (Sandbox Code Playgroud)
这很有效,并且恢复过程没有崩溃,因为我猜有趣的国际字符已正确处理。
但现在恢复过程非常缓慢。对于 26 GB 的文件,它会运行一整夜(罪魁祸首是一张拥有 4000 万行的表)。我可以看到它每 15 秒恢复大约 3000 行。但按照这个速度,恢复过程将永远持续下去。
那么有没有一种方法可以快速恢复转储文件而不弄乱编码呢?
小智 5
由于I/OSQL 操作的磁盘活动繁重,您的进程很慢。您需要针对密集操作优化 innodb。修改你的 mysql 配置文件以包含以下几行:
innodb_buffer_pool_size = 4G
innodb_log_buffer_size = 256M
innodb_log_file_size = 1G
innodb_write_io_threads = 16
Run Code Online (Sandbox Code Playgroud)
innodb_buffer_pool_size: InnoDB缓存表和索引数据的内存区域。当表数据缓存在InnoDB缓冲池中时,可以通过查询重复访问它,而不需要任何磁盘I/O。数据更改会被缓存,而不是立即写入磁盘。
更大的缓冲池需要更少的磁盘 I/O 来多次访问相同的表数据。在专用数据库服务器上,您可以将缓冲池大小设置为计算机物理内存的 80%,否则使用50 to 75系统内存的百分比。默认缓冲池大小为 128MB
innodb_log_buffer_size: InnoDB 用于写入磁盘上日志文件的缓冲区大小(以字节为单位)。
大的日志缓冲区允许大型事务运行,而无需在事务提交之前将日志写入磁盘。因此,如果您有更新、插入或删除许多行的事务,则增大日志缓冲区可以节省磁盘 I/O。
innodb_log_file_size:日志组中每个日志文件的大小(以字节为单位)。大的大小可确保服务器可以平滑工作负载活动的高峰和低谷,这通常意味着有足够的重做日志空间来处理一个多小时的写入活动。值越大,缓冲池中需要的检查点刷新活动越少,从而节省磁盘 I/O
Innodb_write_io_threads: InnoDB中写操作的I/O线程数。默认值为4。InnoDB使用后台线程来服务各种类型的I/O请求。。您可以使用 innodb_read_io_threads 和 innodb_write_io_threads 配置参数来配置为数据页上的读写 I/O 提供服务的后台线程的数量。
这些参数分别表示用于读取和写入请求的后台线程数。每个后台线程最多可以处理 256 个待处理的 I/O 请求。
| 归档时间: |
|
| 查看次数: |
7977 次 |
| 最近记录: |