记录解决在使用postman访问docker容器后端服务过程中碰到的一系列问题
将容器内部的20434端口映射到宿主机20434端口,然后将容器中的服务启动的时候设置监听20434端口,访问docker容器服务的时候可以通过宿主机的20434端口进行访问。
- 遇到的问题1:[Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT E.JOB_EXECUTION_ID, E.START_TIME, E.END_TIME, E.STATUS, E.EXIT_CODE, E.EXIT_MESSAGE, E.CREATE_TIME, E.LAST_UPDATED, E.VERSION, E.JOB_INSTANCE_ID, E.JOB_CONFIGURATION_LOCATION from BATCH_JOB_EXECUTION E, BATCH_JOB_INSTANCE I where E.JOB_INSTANCE_ID=I.JOB_INSTANCE_ID and I.JOB_NAME=? and E.START_TIME is not NULL and E.END_TIME is NULL order by E.JOB_EXECUTION_ID desc]; nested exception is java.sql.SQLSyntaxErrorException: Table 'preprocess.BATCH_JOB_EXECUTION' doesn't exist]
with root causejava.sql.SQLSyntaxErrorException: Table 'preprocess.BATCH_JOB_EXECUTION' doesn't exist
日志显示的SQL语句里面的表名是大写的且在数据库里面找不到,确实是在我的数据库里面没有相应的表,但是我的sql语句写的是小写的表名,不知道为什么查询的时候变成了大写(有可能是大小写敏感导致的)。而且我的数据库中多了几个名称为大写字母的表,这是我原来数据库中不存在的表。
找到解决上述问题的办法:将数据库的大小写敏感给关闭。
关闭方法:首先你得将mysql服务关闭,然后找到/etc/my.cnf文件,在其中添加lower_case_table_names=1这一句(告诉MySql在创建和查询表的时候忽略大小写)最后保存重启mysql服务。例如我的文件:lower_case_table_names=1 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid -
我在上述重启mysql服务的时候碰到了以下问题:
2024-10-19T11:36:51.478400Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.39) starting as process 4197 2024-10-19T11:36:51.486270Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2024-10-19T11:36:52.083394Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. 2024-10-19T11:36:52.097039Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0'). 2024-10-19T11:36:52.097308Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. 2024-10-19T11:36:52.097350Z 0 [ERROR] [MY-010119] [Server] Aborting 2024-10-19T11:36:52.671908Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.39) MySQL Community Server - GPL.上述日志表明服务器的
lower_case_table_names设置值为1,而数据字典的设置值为0(数据字典中默认为0)。要解决这个问题,需要确保lower_case_table_names的设置在服务器和数据字典中是一致的。我们要做的是将数据字典修改为1,
修改方法:
1. 停止MySQL服务:
systemctl stop mysqld
2. 删除数据目录:
为了重新初始化MySQL并设置lower_case_table_names=1,需要删除现有的数据目录。请注意,这将删除所有现有的数据库数据,因此在执行此步骤之前,请确保已经备份了所有重要数据。
rm -rf /var/lib/mysql
3. 重新初始化MySQL:
使用--lower_case_table_names=1选项重新初始化MySQL。
mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql
最后重新启动MySQL服务即可
systemctl start mysqld
此时数据库中的数据需要重新恢复,可以参照 将一个服务器(A)中的数据库迁移到另外一个服务器(B)上(MySql)_把一个mysql服务器备份到另外一个上面-CSDN博客
中的:mysql -u username -p mydatabase < /path/to/mydatabase_backup.sql命令将保存的sql文件进行恢复。
更多推荐


所有评论(0)