@liruiyi962464
2025-11-17T09:55:50.000000Z
字数 2577
阅读 9
mysql
lower_case_table_names=1,需首次初始化时设置);ONLY_FULL_GROUP_BY 解决 XXL-JOB SQL 报错。执行 sudo systemctl restart mysql 时,服务启动失败,错误日志(/var/log/mysql/error.log)显示:
Multiple files found for the same tablespace ID: Tablespace ID: 1 = ['mysql_bak/sys/sys_config.ibd', 'sys/sys_config.ibd']
→ 原因:mysql_bak 备份目录与当前数据目录文件冲突,InnoDB 表空间 ID 重复。
# 1. 停止 MySQL 服务sudo systemctl stop mysql# 2. 移动冲突的备份目录(避免 InnoDB 扫描)sudo mv /var/lib/mysql_bak /tmp/mysql_bak_saved# 3. 清空当前无效数据目录sudo rm -rf /var/lib/mysql/*
# 1. 确保数据目录存在(默认 /var/lib/mysql)sudo mkdir -p /var/lib/mysql# 2. 赋予 mysql 用户所有权(否则初始化失败)sudo chown -R mysql:mysql /var/lib/mysqlsudo chmod 700 /var/lib/mysql # 限制仅 mysql 可访问
lower_case_table_names=1,核心步骤)
# 初始化数据目录,强制设置不区分大小写(仅首次初始化有效)sudo mysqld --initialize --user=mysql --lower_case_table_names=1
# 从错误日志中提取临时密码(用于首次登录)sudo grep 'temporary password' /var/log/mysql/error.log
# 打开 MySQL 服务配置文件(mysqld.cnf)sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld] 节点下添加以下配置(同时解决 XXL-JOB 报错):
[mysqld]pid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.sockdatadir = /var/lib/mysqllog-error = /var/log/mysql/error.loglower_case_table_names=1 # 永久不区分大小写sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 移除 ONLY_FULL_GROUP_BY
保存退出:Esc → 输入 :wq → 回车。
sudo systemctl start mysql# 验证启动状态(显示 active (running) 为正常)sudo systemctl status mysql
# 1. 用临时密码登录 MySQLsudo mysql -u root -p# 输入步骤2获取的临时密码# 2. 重置为自定义密码(示例:Root@123456,需包含大小写+数字+符号)ALTER USER 'root'@'localhost' IDENTIFIED BY 'Sxxt@0825';FLUSH PRIVILEGES; # 刷新权限,立即生效# 3.开放外部连接8// 按照顺序执行// 切换数据库USE mysql;// 执行更新权限语句UPDATE user SET host = '%' WHERE user = 'root';// 查看权限SHOW GRANTS FOR 'root'@'%';// 刷新服务器配置FLUSH PRIVILEGES;# 4. 退出 MySQLexit;
# 1. 登录 MySQL 验证参数sudo mysql -u root -pSELECT @@lower_case_table_names; # 输出 1,不区分大小写生效SELECT @@sql_mode; # 无 ONLY_FULL_GROUP_BY,XXL-JOB 报错解决# 2. 验证业务数据(如 internshipv2、xxl_job 库)SHOW DATABASES; # 显示所有恢复的数据库USE internshipv2;SHOW TABLES; # 表名已自动转为小写(不区分大小写生效)SELECT * FROM dj_base_class_info LIMIT 10; # 数据正常查询
| 操作目的 | 核心命令/步骤 |
|---|---|
| 不区分大小写初始化 | sudo mysqld --initialize --user=mysql --lower_case_table_names=1 |
| 获取临时密码 | sudo grep 'temporary password' /var/log/mysql/error.log |
| 重置 root 密码 | 登录后执行 ALTER USER 'root'@'localhost' IDENTIFIED BY '自定义密码'; FLUSH PRIVILEGES; |
| 永久配置不区分大小写 | 编辑 mysqld.cnf,添加 lower_case_table_names=1 |
| 移除 ONLY_FULL_GROUP_BY | 配置文件中 sql_mode 移除该字段,重启服务 |
| 解决表空间冲突 | 移动/删除 mysql_bak 目录:sudo mv /var/lib/mysql_bak /tmp/ |