使用 mysqldump 升级 seekdb
支持通过 mysqldump 进行逻辑迁移的方式来升级 seekdb。
也支持通过 OceanBase OBLOADER/OBDUMPER 进行逻辑迁移来升级 seekdb。有关 OceanBase OBLOADER/OBDUMPER 的详细使用介绍,参见 OceanBase OBLOADER/OBDUMPER 介绍。
mysqldump
mysqldump 是 MySQL 最常用的逻辑导入导出的工具,主要用于转储数据库。
mysqldump 备份原理是通过协议连接到数据库后,将需要备份的数据查询出来,并将查询的数据转换成对应的 INSERT 语句(逻辑导出)。
还原数据时,执行导出文件的 SQL 语句即可 (逻辑导入)。通过此方法,可在不同数据库之间进行数据迁移。
升级前准备
-
升级前请确保,您已经部署了新版本 seekdb。
-
已经安装了 mysqldump。
推荐版本:
系统 版本 Linux mysqldump Ver 10.13 Distrib 5.6.37, for Linux (x86_64) MacOS mysqldump Ver 10.13 Distrib 5.7.21, for macos10.13 (x86_64)
升级
备份数据
-
登录旧版本 seekdb。
mysql -h127.0.0.1 -uroot -P2881 -p****** -A这里涉及到的 host 和 Port 信息全部是旧版本 seekdb 的。
-
设置 SQL 执行超时时间。
SET GLOBAL ob_trx_timeout=1000000000,GLOBAL ob_query_timeout=1000000000; -
导出数据。
最终将数据备份到了
backup.sql文件中。mysqldump -h`host` -P`port` -uroot --skip-triggers --databases `database-name` --skip-extended-insert > ./backup.sql提示对于一些默认选项,在参数前使用
--skip可以禁用或者取消相对应的效果。参数 参数缩写 是否必填 描述 示例 --host -h 是 服务器 IP 地址 -h127.0.0.1 --port -P 是 服务器端口号 -P2881 --user -u 是 用户名 -uroot --password -p 否 密码 --databases 无 是 指定数据库。 --all-databases表示导出所有数据库,不推荐使用,建议单独指定。实际使用中,可以直接填写数据库名。test --skip-triggers 无 否 禁用触发器。 --skip-triggers --skip-extended-insert 无 否 导出语句为多条 INSERT格式,否则为INSERT INTO table VALUES(...),(...),格式。--skip-extended-insert > 无 是 指定保存路径 > /backup/mysqldump/alldb.sql 另外一些常用的参数:
参数 参数缩写 是否必填 描述 示例 -d 无 否 仅导出表结构不导出数据。 -d -t 无 否 只导出数据,而不添加CREATE TABLE 语句。 -t --compact 无 否 压缩模式,产生更少的输出。 --compact --comments 无 否 添加注释信息。 --comments --complete-insert 无 否 输出完成的插入语句。 --complete-insert --force 无 否 忽略错误。 --force --lock-tables 无 否 在导出过程中锁库。 --skip-lock-tables:在导出过程中不锁库。当前版本 seekdb 中,无论使用哪个参数,在导出过程中都不会锁库。 --lock-tables 更多的参数,可以参考 mysqldump --help。
常用示例
-
备份所有数据库:
mysqldump -h127.0.0.1 -P2881 -uroot -p --all-databases > /backup/mysqldump/alldb.sql -
备份指定数据库 test:
mysqldump -h127.0.0.1 -P2881 -uroot -p test > /backup/mysqldump/test.sql -
备份指定数据库的指定表 table1,table2。(多个表以空格间隔)
mysqldump -h127.0.0.1 -P2881 -uroot -p mysql table1 table2 > /backup/mysqldump/table2.sql -
备份指定数据库排除某些表
mysqldump -h127.0.0.1 -P2881 -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.sql
-
恢复数据
-
如果旧版本 seekdb 所在服务器可以直接访问新版本的 seekdb,则可以直接恢复数据。
-
登录到新版本 seekdb 中。
mysql -h`new-host` -P`new-port` -uroot -Ac -
导入数据。
source backup.sql;
-
-
如果旧版本 seekdb 所在服务器无法直接访问新版本的 seekdb,则需要先把备份的数据拷贝至新版本 seekdb 所在服务器,再执行恢复数据。
-
登录到新版本 seekdb 中。
mysql -h`new-host` -P`new-port` -uroot -Ac -
导入数据。
source backup.sql;
-
常见问题
数据处理超时
当您需要导出的数据量较多时,可能会报 TIMEOUT 4012 错误。为避免这个错误您需要登录数据库运行下述语句调整系统参数,导出完成后您可以修改回原值。
mysqldump: Error 4012: Timeout, query has reached the maximum query timeout: 10000000(us), maybe you can adjust the session variable ob_query_timeout or query_timeout hint, and try again.
调整系统参数。
SET GLOBAL ob_trx_timeout=1000000000,GLOBAL ob_query_timeout=1000000000;