美文网首页
阿里云 DTS 数据迁移过程中的报错记录

阿里云 DTS 数据迁移过程中的报错记录

作者: 风Boy | 来源:发表于2017-05-30 15:29 被阅读427次

迁移准备

终于把一个小应用放到阿里的云服务器上了,因为用的是 MySQL 5.6 的数据库,试试使用 DTS 迁移到阿里云的数据库上。购买了 MySQL 5.6 的数据库,创建好了账号和数据库,于是直接开始迁移。

预检查报错

  • 权限错误
    迁移的账号需要具有数据复制的权限,列举下数据库中常用的权限
权限 权限级别 权限说明
CREATE/DROP 库表(索引) 创建删除
ALTER/DELETE/INDEX/INSERT/SELECT/UPDATE 更改删除索引插入查询更新
CREATE (SHOW) VIEW 视图 创建(查看)视图
ALTER(CREATE) ROUTINE 存储过程 更改(创建)存储过程
EXECUTE 存储过程 执行存储过程
FILE 服务器主机上的文件访问 文件访问权
CREATE TEMPORARY TABLES 服务器管理 创建临时表权限
LOCK TABLES 服务器管理 锁表权限
CREATE USER 服务器管理 创建用户权限
PROCESS 服务器管理 查看进程权限
RELOAD 服务器管理 执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限
REPLICATION CLIENT 服务器管理 复制
REPLICATION SLAVE 服务器管理 复制
SHOW DATABASES 服务器管理 查看数据库权限
SHUTDOWN 服务器管理 关闭数据库权限
SUPER 服务器管理 执行kill线程权限

而 DTS 需要的是 REPLICATION SLAVE 和 REPLICATION CLIENT 权限

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user'@'%';
mysql> SHOW GRANTS FOR 'user'@'%';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for user@%                                                                                                                   |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user'@'%' IDENTIFIED BY PASSWORD '****' |
| GRANT ALL PRIVILEGES ON `datebase`.* TO 'user'@'%'                                                                                     |
+------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

  • 源库server_id检查

由于阿里云的 RDS 数据库采用的是主从架构,所以需要开启设置 server_id ,参考

源数据库需要设置 server_id 大于 1,源库 serverid 没有设置,增量迁移不能成功拉取 binlog,设置的方式

set global server_id=某个不为1的数

建议在配置文件中,直接配置 server_id=某个不为1的数

mysql> SHOW GLOBAL VARIABLES like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 0     |
+---------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL server_id=2;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GLOBAL VARIABLES like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+
1 row in set (0.00 sec)
  • 开启源库 binlog

如果源库 binlog 没有开启,增量迁移无法拉取事务日志。
调用命令 show global variables like 'log_bin'; 确认 log_bin=on。在源实例,更改 my.conf, 设置 log_bin,并重启MySQL后重新进行预检查

mysql> SHOW GLOBAL VARIABLES LIKE 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'log_bin%';
+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON                             |
| log_bin_basename                | /var/lib/mysql/my-binlog       |
| log_bin_index                   | /var/lib/mysql/my-binlog.index |
| log_bin_trust_function_creators | OFF                            |
| log_bin_use_v1_row_events       | OFF                            |
+---------------------------------+--------------------------------+
5 rows in set (0.00 sec)

  • 源库binlog模式

源库默认为源库 binlog format 的格式需要 raw 格式,需要在源库执行 set global binlog_format=ROW 后重新进行预检查。建议在配置文件中设置 binlog_format = ROW,重启MySQL,否则连接中的 session 可能以非ROW模式继续写入.

#Add to DTS
server_id = 2
log-bin = my-binlog
binlog_format = ROW

mysql> SHOW VARIABLES LIKE 'binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

相关文章

网友评论

      本文标题:阿里云 DTS 数据迁移过程中的报错记录

      本文链接:https://www.haomeiwen.com/subject/bkdhfxtx.html