registro de migración de mysql
antecedentes
La empresa ha construido su propia plataforma PAAS, que puede soportar el proceso de CI / CD. Nuestro proceso de lanzamiento es mit-> test-> uat-> prod. Correspondientes a los entornos de desarrollo, pruebas, aceptación y producción, respectivamente, y los entornos están aislados entre sí.
Existe una base de datos histórica solo disponible en el entorno TEST. Para facilitar la depuración, es necesario copiar una copia al entorno MIT. A continuación se muestra un registro de los problemas encontrados.
Método de migración de datos seguro y confiable
herramienta
Artículos recomendados: https://www.cnblogs.com/swtjavaspace/p/9698167.html
navicat usando Herramientas -> La transmisión de datos puede poner fácilmente una máquina en otra sincronización de la base de datos de la máquina (e incluyendo estructuras de datos)
Problemas de encuentro
Obtuve un paquete más grande que 'max_allowed_packet' bytes Con declaración
Si el contenido de una tabla de base de datos es demasiado grande, fallará. En este momento, puede modificar la configuración de la base de datos.
vim /etc/my.conf # windows下是my.ini
# [mysqld]下加入一行 注意是mysqld
max_allowed_packet=16M
systemctl restart mariadb # 然后重启mysql
Reiniciar mysql
systemctl restart mariadb
Ejecute la declaración para ver si surte efecto:
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 representa 16M y el valor predeterminado es 1024.
Valor predeterminado no válido para la solución de error "CREATE_TIME"
Un campo en la tabla de origen es del tipo de fecha y hora y el valor predeterminado usa CURRENT_TIMESTAMP para generar la hora predeterminada. Se informó un error durante la importación. Según la información en línea, esta función debe ser compatible con mysql5.7 o superior:
Ver la versión de 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.
Opción 1: actualice mysql 5.7 y superior.
Solución 2: modifique el valor predeterminado CURRENT_TIMESTAMP a NULL.
Opción tres: omitir.
Debido a que algunas tablas no son prácticas, elegí la opción 3 y omití las tablas de informes de errores al transferir datos. Si es necesario más adelante, exporte e importe manualmente para realizar correcciones.
Referencia:
https://www.jianshu.com/p/2f30786a5a6a
https://www.cnblogs.com/han-1034683568/p/11418264.html
Ignorar mayúsculas y minúsculas en los nombres de las tablas
dos't not exist bi_sqa.sys_log
Una vez completada la migración, inicie el servicio y pregunte si el nombre de la tabla no existe. Después de verificar el código que se encuentra dentro usando el nombre de la tabla en mayúsculas , y en Linux, mysql no está habilitado de forma predeterminada, ignora la función de distinción entre mayúsculas y minúsculas del nombre de la tabla.
En mysql.conf, el mysqld agrega la siguiente configuración, luego puede reiniciar mysql.
[mysqld]
lower_case_table_names=1
Comprueba si funciona
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)
Si se muestra 1 , significa que está bien.
Se recomienda utilizar nombres de tablas en minúsculas.
Si habilita lower_case_table_names , el sistema utilizando todos los nombres de tabla en minúsculas, si aparece en mayúsculas nombre de la tabla, se le solicitará un problema inexistente.
Por lo tanto, si hay muchos módulos del sistema, que involucran múltiples lenguajes de desarrollo (C ++ / JAVA), etc., se recomienda usar los nombres de las tablas en minúsculas para evitar algunos problemas de antemano.