跳到主要内容
版本:V1.1.0

使用 mysqldump 升级 seekdb

支持通过 mysqldump 进行逻辑迁移的方式来升级 seekdb。

信息

也支持通过 OceanBase OBLOADER/OBDUMPER 进行逻辑迁移来升级 seekdb。有关 OceanBase OBLOADER/OBDUMPER 的详细使用介绍,参见 OceanBase OBLOADER/OBDUMPER 介绍

mysqldump

mysqldump 是 MySQL 最常用的逻辑导入导出的工具,主要用于转储数据库。

mysqldump 备份原理是通过协议连接到数据库后,将需要备份的数据查询出来,并将查询的数据转换成对应的 INSERT 语句(逻辑导出)。

还原数据时,执行导出文件的 SQL 语句即可 (逻辑导入)。通过此方法,可在不同数据库之间进行数据迁移。

升级前准备

  • 升级前请确保,您已经部署了新版本 seekdb。

  • 已经安装了 mysqldump。

    推荐版本:

    系统版本
    Linuxmysqldump Ver 10.13 Distrib 5.6.37, for Linux (x86_64)
    MacOSmysqldump Ver 10.13 Distrib 5.7.21, for macos10.13 (x86_64)

升级

备份数据

  1. 登录旧版本 seekdb。

    mysql -h127.0.0.1 -uroot -P2881 -p****** -A

    这里涉及到的 host 和 Port 信息全部是旧版本 seekdb 的。

  2. 设置 SQL 执行超时时间。

    SET GLOBAL ob_trx_timeout=1000000000,GLOBAL ob_query_timeout=1000000000;
  3. 导出数据。

    最终将数据备份到了 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,则可以直接恢复数据。

    1. 登录到新版本 seekdb 中。

      mysql -h`new-host` -P`new-port` -uroot -Ac
    2. 导入数据。

      source backup.sql;
  • 如果旧版本 seekdb 所在服务器无法直接访问新版本的 seekdb,则需要先把备份的数据拷贝至新版本 seekdb 所在服务器,再执行恢复数据。

    1. 登录到新版本 seekdb 中。

      mysql -h`new-host` -P`new-port` -uroot -Ac
    2. 导入数据。

      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;