遷移準備
終于把一個小應(yīng)用放到阿里的云服務(wù)器上了,因為用的是 MySQL 5.6 的數(shù)據(jù)庫,試試使用 DTS 遷移到阿里云的數(shù)據(jù)庫上。購買了 MySQL 5.6 的數(shù)據(jù)庫,創(chuàng)建好了賬號和數(shù)據(jù)庫,于是直接開始遷移。
預(yù)檢查報錯
- 權(quán)限錯誤
遷移的賬號需要具有數(shù)據(jù)復(fù)制的權(quán)限,列舉下數(shù)據(jù)庫中常用的權(quán)限
| 權(quán)限 | 權(quán)限級別 | 權(quán)限說明 |
|---|---|---|
| CREATE/DROP | 庫表(索引) | 創(chuàng)建刪除 |
| ALTER/DELETE/INDEX/INSERT/SELECT/UPDATE | 表 | 更改刪除索引插入查詢更新 |
| CREATE (SHOW) VIEW | 視圖 | 創(chuàng)建(查看)視圖 |
| ALTER(CREATE) ROUTINE | 存儲過程 | 更改(創(chuàng)建)存儲過程 |
| EXECUTE | 存儲過程 | 執(zhí)行存儲過程 |
| FILE | 服務(wù)器主機上的文件訪問 | 文件訪問權(quán) |
| CREATE TEMPORARY TABLES | 服務(wù)器管理 | 創(chuàng)建臨時表權(quán)限 |
| LOCK TABLES | 服務(wù)器管理 | 鎖表權(quán)限 |
| CREATE USER | 服務(wù)器管理 | 創(chuàng)建用戶權(quán)限 |
| PROCESS | 服務(wù)器管理 | 查看進程權(quán)限 |
| RELOAD | 服務(wù)器管理 | 執(zhí)行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的權(quán)限 |
| REPLICATION CLIENT | 服務(wù)器管理 | 復(fù)制 |
| REPLICATION SLAVE | 服務(wù)器管理 | 復(fù)制 |
| SHOW DATABASES | 服務(wù)器管理 | 查看數(shù)據(jù)庫權(quán)限 |
| SHUTDOWN | 服務(wù)器管理 | 關(guān)閉數(shù)據(jù)庫權(quán)限 |
| SUPER | 服務(wù)器管理 | 執(zhí)行kill線程權(quán)限 |
而 DTS 需要的是 REPLICATION SLAVE 和 REPLICATION CLIENT 權(quán)限
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 數(shù)據(jù)庫采用的是主從架構(gòu),所以需要開啟設(shè)置 server_id ,參考
源數(shù)據(jù)庫需要設(shè)置 server_id 大于 1,源庫 serverid 沒有設(shè)置,增量遷移不能成功拉取 binlog,設(shè)置的方式
set global server_id=某個不為1的數(shù)
建議在配置文件中,直接配置 server_id=某個不為1的數(shù)
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 沒有開啟,增量遷移無法拉取事務(wù)日志。
調(diào)用命令 show global variables like 'log_bin'; 確認 log_bin=on。在源實例,更改 my.conf, 設(shè)置 log_bin,并重啟MySQL后重新進行預(yù)檢查
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 格式,需要在源庫執(zhí)行 set global binlog_format=ROW 后重新進行預(yù)檢查。建議在配置文件中設(shè)置 binlog_format = ROW,重啟MySQL,否則連接中的 session 可能以非ROW模式繼續(xù)寫入.
#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)