你好朋友!如果你计划从on-prem服务器数据库迁移到RDS(极光或MySQL RDS),你通常没有多少选择,只能这样做,使用逻辑备份,如,mysqldump mysqlpump,mydumper或类似。(事实上,你可以做一个物理备份rayben雷竞技 S3,但是考虑到它没有提到任何时候哪个牌子MySQL, Percona MySQL服务器,MariaDB——或者哪个版本-5.5、5.6或MariaDB 10。雷竞技下载官网X -源,其中许多为这一战略组合是不支持的,所以逻辑备份路要走。)
根据实例的大小或要迁移的模式,我们可以选择一个工具或另一个涉及的服务器的资源利用和节省时间。
在这个博客,为了简单起见,我们将使用mysqldump,并生成一个表,但最奇怪的是,我们要有一定的创建对象定义者,它不能被改变。
如果你想创建相同的实验室,你可以找到它在这里。
接下来,我把下面的列表对象迁移(模式被称为“迁移”,有以下对象):
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
22
23
24
25
26
27
28
29日
30.
31日
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
mysql源>
选择
*
从
(选择
event_schema
作为
SCHEMA_NAME,
event_name
作为
OBJECT_NAME,
定义者,
“事件”
作为
OBJECT_TYPE
从
information_schema。事件
UNION ALL
选择
routine_schema
作为
SCHEMA_NAME,
routine_name
作为
OBJECT_NAME,
定义者,
“常规”
作为
OBJECT_TYPE
从
information_schema.routines
UNION ALL
选择
trigger_schema
作为
SCHEMA_NAME,
trigger_name
作为
OBJECT_NAME,
定义者,
“触发”
作为
OBJECT_TYPE
从
information_schema。触发器
UNION ALL
选择
table_schema
作为
SCHEMA_NAME,
table_name
作为
OBJECT_NAME,
定义者,
“视图”
作为
OBJECT_TYPE
从
information_schema.views
UNION ALL
选择
table_schema
作为
SCHEMA_NAME,
table_name
作为
OBJECT_NAME,
”,
“表”
作为
OBJECT_TYPE
从
information_schema。表
在哪里
引擎
<
>
“零”
)对象
在哪里
OBJECTS.SCHEMA_NAME=
“迁移”
命令
3,
4;
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - +
|SCHEMA_NAME|OBJECT_NAME|
定义者
|OBJECT_TYPE|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - +
|迁移|人||
表
|
|迁移|persons_audit||
表
|
|迁移|func_cube|
(电子邮件保护)%|例程|
|迁移|before_persons_update|
(电子邮件保护)%|
触发
|
|迁移|v_persons|
(电子邮件保护)%|
视图
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - +
5
行
在
集
(0.01sec)
|
没错,这就是我们。
经典的命令执行这种事情通常是以下几点:
|
1
|
美元
,mysqldump
- - -
单
- - - - - -
事务
&
盼
;
- - - - - -
h
源
- - - - - -
主机
- - - - - -
u
雷竞技下载官网
- - - - - -
ps3cre3t
!
迁移
- - -
例程
- - -
触发器
- - -
紧凑的
- - -
添加
- - - - - -
下降
- - - - - -
表
- - -
跳过
- - - - - -
评论
>
迁移
. sql
|
什么是下一个合乎逻辑的步骤遵循RDS /极光实例(又名“目的地”)?
- 创建必要的用户(您可以使用pt-show-grants工具来提取用户及其权限)。
- 创建模式“迁移”。
- 导入从命令行模式。
这里我们必须澄清:正如你可能已经注意到,对象属于用户“foo”,用户的应用程序,并很可能出于安全原因,客户端或利害关系人不为我们提供的密码。
dba,因此我们将使用用户的所有权限,AWS允许我们(不幸的是,AWS不允许超级许可),这将是一个问题,下面我们将介绍,我们绝对能解决的。
所以,命令执行数据导入将以下:
|
1
|
美元
mysql
- - - - - -
h
<
实例
- - - - - -
端点
>
迁移
- - - - - -
u
雷竞技下载官网
- - - - - -
ps3cre3t
!
- - - - - -
vv
<
迁移
. sql
|
这就是问题的起源:
如果你想迁移到版本的RDS MySQL /极光5.7(我们不推荐的终点是10月31日,2023年! !)你可能会得到以下错误:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
22
23
24
25
26
27
28
29日
30.
31日
32
33
34
35
36
37
38
39
40
|
- - - - - - - - - - - - - - -
下降
表
如果存在
“人”
- - - - - - - - - - - - - - -
查询好吧,0
行
影响
- - - - - - - - - - - - - - -
/ * !40101集@saved_cs_client = @@character_set_client */
- - - - - - - - - - - - - - -
查询好吧,0
行
影响
- - - - - - - - - - - - - - -
/ * !50503集character_set_client = utf8mb4 */
- - - - - - - - - - - - - - -
查询好吧,0
行
影响
- - - - - - - - - - - - - - -
创建
表
“人”(
“PersonID”
int
非空,
“姓”
varchar(255)
默认的
零,
“FirstName”
varchar(255)
默认的
零,
“地址”
varchar(255)
默认的
零,
“城市”
varchar(255)
默认的
零,
主键
(“PersonID”)
)
引擎
=
InnoDB
默认的
字符集
=utf8mb4
核对
=utf8mb4_0900_ai_ci
…很多的消息/
行
- - - - - - - - - - - - - - -
/ * !50003创建*/
/ * !50017定义者=`foo`@`%`*/
/ * !50003触发`before_persons_update` BEFORE UPDATE ON `persons` FOR EACH ROW INSERT INTO persons_audit
设置PersonID = OLD.PersonID,
LastName = OLD.LastName,
城市= OLD.City,
现在changedat = () * /
- - - - - - - - - - - - - - -
错误1227年(42000)
在
行23:访问否认;你需要(在
至少
一个)的
超级
特权(年代)
为
这操作
再见
|
顺便说一下,你需要帮助升级到MySQL 8.0吗?你需要呆在MySQL 5.7一段时间?我们会支持你的。raybetapp开户网站
这个错误是什么意思?因为我们不执行导入(或多或少比执行一组查询和SQL命令)与用户“foo”对象的所有者是谁再次(见第一个查询的定义列如上所示),用户“percona”需要特殊权限如超级模仿和“成为”“foo”——但如前所述,在AWS许可是不可能的。雷竞技下载官网
所以呢?
几个选项是可能的;我们将列出其中的一些
- 编辑迁移。每个定义的sql文件,有一个定义者除了percona,换成percona或直接消除定义者条款。雷竞技下载官网优点:它的工作原理。缺点:对象将与用户的安全上下文执行“percona”不仅危险,而且是错误的。雷竞技下载官网
- 我的同事Sveta提出的应用解决方案在这里,但是你必须使用mysqlpump。即便如此,迁移对象留在他们进口的定义者。
- 作为最后的手段,请求用户的密码“foo”,这并不总是可能的。
正如您将看到的,不是一个简单的解决方案。我想说复杂,但也不是不可能。
让我们看看会发生什么,如果RDS /极光版的MySQL 8家庭。使用相同的命令来执行导入,这是输出:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
22
23
24
25
26
27
28
29日
30.
31日
32
33
34
35
36
37
38
39
40
41
42
|
- - - - - - - - - - - - - - -
下降
表
如果存在
“人”
- - - - - - - - - - - - - - -
查询好吧,0
行
影响
- - - - - - - - - - - - - - -
/ * !40101集@saved_cs_client = @@character_set_client */
- - - - - - - - - - - - - - -
查询好吧,0
行
影响
- - - - - - - - - - - - - - -
/ * !50503集character_set_client = utf8mb4 */
- - - - - - - - - - - - - - -
查询好吧,0
行
影响
- - - - - - - - - - - - - - -
创建
表
“人”(
“PersonID”
int
非空,
“姓”
varchar(255)
默认的
零,
“FirstName”
varchar(255)
默认的
零,
“地址”
varchar(255)
默认的
零,
“城市”
varchar(255)
默认的
零,
主键
(“PersonID”)
)
引擎
=
InnoDB
默认的
字符集
=utf8mb4
核对
=utf8mb4_0900_ai_ci
- - - - - - - - - - - - - - -
查询好吧,0
行
影响
…很多的消息/
行
- - - - - - - - - - - - - - -
/ * !50003创建*/
/ * !50017定义者=`foo`@`%`*/
/ * !50003触发`before_persons_update` BEFORE UPDATE ON `persons` FOR EACH ROW INSERT INTO persons_audit
设置PersonID = OLD.PersonID,
LastName = OLD.LastName,
城市= OLD.City,
现在changedat = () * /
- - - - - - - - - - - - - - -
错误1227年(42000)
在
行23:访问否认;你需要(在
至少
一个)的
超级
或
SET_USER_ID特权(年代)
为
这操作
|
哦!出现了不同的消息,说类似,“你需要(至少一个)超级为这个操作或SET_USER_ID特权。”
因此,现在我们要做的就是分配以下“percona”用户许可:雷竞技下载官网
|
1
|
mysql目的地>
格兰特
SET_USER_ID
在
* . *
来
“雷竞技下载官网percona”;
|
宾果!导入完成没有问题。我要告诉你的一些命令,会继续失败,工作。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
- - - - - - - - - - - - - - -
/ * !50003创建*/
/ * !50017定义者=`foo`@`%`*/
/ * !50003触发`before_persons_update` BEFORE UPDATE ON `persons` FOR EACH ROW INSERT INTO persons_audit
设置PersonID = OLD.PersonID,
LastName = OLD.LastName,
城市= OLD.City,
现在changedat = () * /
- - - - - - - - - - - - - - -
查询好吧,0
行
影响
- - - - - - - - - - - - - - -
创建
定义者=“foo”@“%”
函数
“func_cube”(num
INT)
返回
int
确定的
开始
声明
totalcube
INT;
集
totalcube=全国矿工工会*全国矿工工会*num;
返回
totalcube;
结束
- - - - - - - - - - - - - - -
查询好吧,0
行
影响
|
除此之外,他们对应的对象属于用户(我的意思是,定义者,安全上下文)。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
22
23
24
25
26
27
28
29日
30.
31日
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
mysql目的地>
选择
*
从
(选择
event_schema
作为
SCHEMA_NAME,
event_name
作为
OBJECT_NAME,
定义者,
“事件”
作为
OBJECT_TYPE
从
information_schema。事件
UNION ALL
选择
routine_schema
作为
SCHEMA_NAME,
routine_name
作为
OBJECT_NAME,
定义者,
“常规”
作为
OBJECT_TYPE
从
information_schema.routines
UNION ALL
选择
trigger_schema
作为
SCHEMA_NAME,
trigger_name
作为
OBJECT_NAME,
定义者,
“触发”
作为
OBJECT_TYPE
从
information_schema。触发器
UNION ALL
选择
table_schema
作为
SCHEMA_NAME,
table_name
作为
OBJECT_NAME,
定义者,
“视图”
作为
OBJECT_TYPE
从
information_schema.views
UNION ALL
选择
table_schema
作为
SCHEMA_NAME,
table_name
作为
OBJECT_NAME,
”,
“表”
作为
OBJECT_TYPE
从
information_schema。表
在哪里
引擎
<
>
“零”
)对象
在哪里
OBJECTS.SCHEMA_NAME=
“迁移”
命令
3,
4;
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - +
|SCHEMA_NAME|OBJECT_NAME|
定义者
|OBJECT_TYPE|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - +
|迁移|人||
表
|
|迁移|persons_audit||
表
|
|迁移|func_cube|
(电子邮件保护)%|例程|
|迁移|before_persons_update|
(电子邮件保护)%|
触发
|
|迁移|v_persons|
(电子邮件保护)%|
视图
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - +
5
行
在
集
(0.01sec)
|
结论
正如您可以看到的,没有借口。需要迁移到MySQL 8。这些小细节帮助更容易成为可能。
这种类型的迁移通常总是有问题;在测试环境中它需要若干次迭代,直到一切都很好,一切仍然可能失败。现在我的亲爱的读者,知道MySQL 8(如版本8.0.22)解决了这个问题,我问你,你还在等什么迁移?
当然,这些类型的迁移可能很复杂。但Per雷竞技下载官网cona为您服务,因此,我分享升级到MySQL 8:工具,可以帮助从我的同事Arunjith,可以指导你,必要的迁移到达目的地。
记住,你总是有机会lol赔率雷电竞 与任何迁移和请求援助。你也可以学习如何Percona专家可以帮助您迁雷竞技下载官网移到Percona无缝MySQL服务器:
我希望你喜欢这个博客,和下一个再见!




