迁移到 Databases for MySQL
有两个选项可用于将数据从现有 MySQL 数据库迁移到 IBM Cloud® Databases for MySQL。 建议使用两个选项: mysqldump
和 mydumper
。 最佳工具取决于特定条件,包括网络连接,数据集大小和中间模式需求。
开始之前
在开始数据迁移之前,需要在本地安装 MySQL ,以便您具有 mysql
和 mysqldump
工具。
MySQL Workbench 还提供了用于处理 MySQL 服务器和数据库的图形工具。 虽然并非严格要求,但 Cloud Databases CLI 还使您能够轻松地连接和复原到新的 Databases for MySQL 部署。
mysqldump
缺省情况下,此本机 MySQL 客户机实用程序会进行安装,并且可以执行逻辑备份,重现表结构和数据,而无需复制实际数据文件。 mysqldump 转储一个或多个 MySQL 数据库,以备份或传输到另一个 MySQL 服务器。 有关更多信息,请参阅 mysqldump 文档。
mysqldump
适合在以下条件下使用:
- 数据集小于 10 GB。
- 迁移时间并不关键,并且重试迁移的成本较低。
- 您不需要执行任何中间模式或数据转换。
如果满足以下任何条件,那么建议不要使用 mysqldump:
- 数据集大于 10 GB。
- 源数据库与目标数据库之间的网络连接不稳定或缓慢。
使用 mysqldump
工具执行以下步骤:
在源数据库上运行 mysqldump
以创建 SQL 文件,该文件可用于重新创建数据库。 至少,使用 CLI 迁移 mysql
需要以下参数:
- 主机名 (
-h
标志) - 端口号 (
-P
标志) - 用户名 (
-u
标志) - -- ssl-mode = VERIFY_IDENTITY (客户机需要加密连接,并针对服务器 CA 证书及其证书中的服务器主机名执行验证)
- -- ssl-ca (认证中心 (CA) 文件的路径名,可在 UI 的 " 概述 " 页面的 "端点 CLI" 选项卡中找到该文件。)
- 数据库名称
- 结果文件 (
-r
标志)
CLI 命令如下所示
mysqldump -h <host_name> -P <port_number> -u <user_name> --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt --set-gtid-purged=OFF -p <database_name> -r dump.sql
要生成 mysqldump 作业的日志文件以在其运行期间跟踪错误,请使用类似如下的命令
mysqldump -h <host_name> -P <port_number> -u <user_name> --log-error=error.log --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt --set-gtid-purged=OFF -p ibmclouddb -r dump.sql
导入时也可以执行相同的操作,例如
mysql -h <host_name> -P <port_number> -u admin --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt -p ibmclouddb < dump.sql > import_logfile.log
有关将 MySQL 复制与全局事务标识 (GTID) 配合使用的更多信息,请参阅 MySQL Reference Manual 中的 Using GTIDs for Failover and Scaleout 。
mysql
命令有许多选项; 请参阅官方文档 和 命令参考 ,以获取其功能的更全面的视图。
复原 mysqldump 的输出
然后,可以将生成的 mysqldump
输出上载到新的 Databases for MySQL 部署中。 由于输出是 SQL ,因此可以简单地通过 mysql
命令将其发送到数据库。 建议对管理用户执行导入。
有关使用 mysql
以管理员身份进行连接的详细信息,请参阅 与 mysql
文档。 要使用 mysql
命令进行连接,您需要管理用户的连接字符串和 TLS 证书,这两个证书都可以在 UI 中找到。 需要从 base64 对证书进行解码,并将其存储为任意本地文件。
要将先前创建的 dump.sql
导入到名为 example-mysql
的数据库部署中,可以使用 -f dump.sql
作为参数来调用 mysql
命令。 此参数指示 mysql
读取并运行文件中的 SQL 语句。
如 连接 mysql
文档中所述, Cloud Databases CLI 插件简化了连接。 可以使用类似于以下的命令来运行先前的 mysql
导入:
mysql -h <host_name> -P <port_number> -u admin --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt -p ibmclouddb < dump.sql
如果未指定用户,那么该命令将自动使用管理用户并以交互方式提示输入密码。 将自动检索并使用 TLS 证书。
当复原过程正在运行时,将发出一些有关正在对数据库部署进行的更改的消息。
mydumper
mydumper 及其成对的逻辑备份工具 myloader ,使用多线程功能来执行与 mysqldump 类似的数据迁移; 但是, mydumper 提供了许多改进,如并行备份,一致读取以及更易于管理输出。 并行性允许在导入和导出过程中提高性能,而由于将单个表转储到单独的文件中,因此可以更轻松地管理输出。
mydumper 适合在以下条件下使用:
- 数据集大于 10 GB。
- 源数据库和目标数据库之间的网络连接快速且稳定。
- 您需要执行中间模式或数据转换。
如果满足以下任何条件,我们不建议使用 mydumper:
- 数据集小于 10 GB。
- 源数据库与目标数据库之间的网络连接不稳定或非常慢。
在开始使用 mydumper 迁移数据之前,首先请参阅 mydumper 项目 以获取有关安装和必要开发者环境的详细信息和逐步指示信息。
接下来,请参阅 如何使用 mydumper 页面,以获取有关使用 mydumper 和 myloader 工具执行完整数据迁移的信息。
调整 InnoDB 可配置变量
您可以配置以下 MySQL InnoDB 选项,以根据机器容量和数据库工作负载来调整性能。
- innodb_buffer_pool_size_percentage
- innodb_flush_log_at_trx_commit
- innodb_log_buffer_size
- innodb_log_file_size
- innodb_lru_scan_depth
- innodb_read_io_threads
- innodb_write_io_threads
- net_read_timeout
- net_write_timeout
innodb_buffer_pool_size_percentage
- 描述:
innodb_buffer_pool_size_percentage value
参数定义数据库容器的专用内存量。 - 缺省设置: 50
- 最大值: 100
- 最小:10
- 需要重新启动: True
由于数据库本身使用给定的内存量,因此如果 innodb_buffer_pool_size_percentage value
参数配置过高,那么数据库内存需求 + innodb_buffer_pool_size_percentage
可能会高于可用内存限制,从而导致内存不足状态 (OOM)。
innodb_buffer_pool_size_percentage
参数值根据数据库大小而有所不同。 缺省值为 50%
,这对于所有大小的数据库都是安全的。 根据需要配置该值; 如果迂到 OOM ,那么该值设置得太高,应该降低该值。
innodb_flush_log_at_trx_commit
-
描述: 控制落实操作的严格 ACID 合规性与更高性能之间的平衡
-
缺省设置: 2
2 的缺省设置并非完全符合 ACID (完全符合 ACID 需要缺省设置 1) ,但性能更高且仍然安全。
- 最大值: 2
- 最小:0
- 需要重新启动 :False
有关更多信息,请参阅 MySQL innodb_flush_log_at_trx_commit 文档。
innodb_log_buffer_size
- 描述 :InnoDB 用于写入磁盘上的日志文件的缓冲区大小 (以字节计)。
- 缺省设置: 32 MiB
- 最大值: 4294967295
- 最小值: 1048576
- 需要重新启动: True
有关更多信息,请参阅 MySQL innodb_log_buffer_size 文档。
innodb_log_file_size
- 描述 :InnoDB 日志文件大小 (以字节为单位)。
- 缺省设置: 64 MB
- 最大: 274877906900
- 最小值: 4194304
- 需要重新启动: True
有关更多信息,请参阅 MySQL innodb_log_file_size 文档。
innodb_lru_scan_depth
- 描述: 影响 InnoDB 缓冲池的清空操作的算法和启发式的参数。
- 缺省设置: 1024
- 最大值: 无最大值
- 最小值: 100
- 需要重新启动: True
有关更多信息,请参阅 MySQL innodb_lru_scan_depth 文档。
innodb_read_io_threads
- 描述 :InnoDB 中读操作的 I/O 线程数。
- 缺省设置: 4
- 最大值: 64
- min: 1
- 需要重新启动: True
有关更多信息,请参阅 MySQL innodb_read_io_threads 文档。
innodb_write_io_threads
- 描述 :InnoDB 中读操作的 I/O 线程数。
- 缺省设置: 4
- 最大值: 64
- min: 1
- 需要重新启动: True
有关更多信息,请参阅 MySQL innodb_write_io_threads 文档。
net_read_timeout
- 描述: 在异常中止读取之前等待来自连接的更多数据的秒数。
- 缺省设置: 30
- 最大:
- min: 1
- 需要重新启动: True
有关更多信息,请参阅 MySQL net_read_timeout 文档。
net_write_timeout
- 描述: 在中止写入之前等待将块写入连接的秒数。
- 缺省设置: 60
- 最大:
- min: 1
- 需要重新启动: True
有关更多信息,请参阅 net_write_timeout
文档。