记一次TEST环境数据库迁移

背景

公司自建了PAAS平台,可以支持CI/CD流程。我们发布流程是mit->test->uat->prod。分别对应开发、测试、验收、生产环境,环境之间是互相隔离的。

有个历史的数据库只有TEST环境才有,为了便于调试,需要拷贝一份到MIT环境,以下是遇到的问题记录。
在这里插入图片描述

安全可靠的数据迁移方式

工具

推荐文章:https://www.cnblogs.com/swtjavaspace/p/9698167.html

navicat使用 工具->数据传输 可以很方便的把一台机器的数据库同步到另一台机器(包括结构和数据)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

遇到问题

Got a packet bigger than ‘max_allowed_packet’ bytes With statement

如果某个数据库表的内容太大,会导致失败。此时修改数据库配置即可。

vim /etc/my.conf  # windows下是my.ini

# [mysqld]下加入一行 注意是mysqld
max_allowed_packet=16M

systemctl restart mariadb # 然后重启mysql

重启mysql

systemctl restart mariadb

执行一下语句查看是否生效:

MariaDB [(none)]> show VARIABLES like '%max_allowed_packet%';
+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| max_allowed_packet       | 16777216   |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
2 rows in set (0.00 sec)

16777216 代表16M,默认是1024。

Invalid default value for 'CREATE_TIME’报错的解决方法

在这里插入图片描述
源表里面某个字段时datetime类型,默认值使用了CURRENT_TIMESTAMP来生成默认时间,导入的时候报错了。根据网上资料,这个功能需要 mysql5.7 版本以上才支持:

查看mysql版本

[root@10-0-59-117 ~]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 253
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

方案一:升级mysql 5.7以上。
方案二:修改默认值CURRENT_TIMESTAMP为NULL。
方案三:跳过。

因为有些表其实用不到,所以我选择了方案三,在进行数据传输的时候把报错的表先跳过了。后面如果有需要再手动导出导入来修正。

参考:
https://www.jianshu.com/p/2f30786a5a6a
https://www.cnblogs.com/han-1034683568/p/11418264.html

忽略表名大小写

dos't not exist bi_sqa.sys_log

迁移完成后,启动服务,提示表名不存在。经过检查发现代码里面使用的 大写表名,而Linux里面的mysql是默认不启用忽略表名大小写功能的。

mysql.confmysqld 下加入下面的配置,然后重启mysql即可。

[mysqld]
lower_case_table_names=1

查看是否生效

MariaDB [(none)]>  show variables like "%case%";
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 1     |
+------------------------+-------+
2 rows in set (0.00 sec)

显示 1,则代表已经Ok了。

推荐使用小写表名

如果启用了 lower_case_table_names 后,系统全部使用小写表名,如果此时出现 大写 的表名,则会提示不存在的问题。

所以,如果系统模块比较多,涉及多种开发语言(C++/JAVA)等,推荐使用小写表名,可以提前规避一些问题。

猜你喜欢

转载自blog.csdn.net/xmcy001122/article/details/105585374