阿里云RDS MySQL迁移数据至本地数据库

1. RDS MySQL数据备份

 在阿里云官方文档中已经提出从RDS MySQL迁移数据至本地数据库的解决办法。

迁移RDS for MySQL数据到本地MySQL

 其中涉及到下载数据备份,文档中提到数据备份限制,MySQL 5.7 SSD云盘(含基础版和高可用版),不支持下载备份,仅可通过恢复功能将数据恢复到新建实例上。

 恰巧,我使用的阿里云MySQL存储类型是SSD云盘属于无法备份数据的类型,在实例信息->备份数据标签->数据备份标签下的查询结构中不提供“下载”按钮,仅提供“恢复”按钮。所以,我从另外一条道路迁移数据:登录数据库管理服务DMS,导出数据库/导出SQL结果集。不同MySQL系列免费导出数据有行数限制。

2. 导入本地数据库

 我曾经用Navicat for MySQL远程登录ECS UbantuOS-service mysql,所以考虑过使用工具导入sql文件。

Navicat for MySQL version = 10.1.7
Local MySQL DB version = 5.7.25

 因为Navicat for MySQL工具有限制,无法insert含有回车、#、//的字符串,每次提示有语法错误,只能放弃这条道路。然后直接在UbantuOS的mysql shell下操作导入sql文件,可以成功建表和插入数据。导入方法:

方法一:
Shell>mysql -u root -p dbname</usr/~/fileName.sql
dbName:需要导入数据的数据库名称
/usr/~/:sql文件所在文件夹的全路径
回车会提示输入mysql的root账户的密码


方法二:
Shell>mysql -u root -p
mysql> use dbName;  // dbName: 数据库名称
...
DATABASE CHANGED
mysql> source /usr/~/fileName.sql // /usr/~/:sql文件所在全路径

 在建表时,曾经发生过异常:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

 建表语句如下

CREATE TABLE `data` (
  `id` varchar(30) NOT NULL,
  `create_date` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 这个错误的原因是高版本mysql(mysql version = 5.7.25)默认的sql_mode包含ONLY_FULL_GROUP_BY,这个属性保证了select到的列都在group by中出现。修改sql_mode属性后,建表时不再报错。查看sql_mode:

mysql>select @@GLOBAL.sql_mode;

result:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

 修改命令:

  1. 暂时命令,重启service mysql后失效
set @@GLOBAL.sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  1. 永久命令,在mysql.cnf配置文件中添加一行,sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,并保存退出配置文件,重启service mysql后生效

Shell>sudo vim /etc/mysql/mysql.conf.d/mysql.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
character_set_server=utf8
# By default we only accept connections from localhost
# bind-address    = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页