本文记录了 MySQL 常见的问题 以及解决方案
数据库迁移目录
- 关闭数据库
service mysqld stop
- 修改
/etc/my.cnf
文件datadir=/var/lib/mysql
改为datadir=/home/lib/mysql
log-error=/home/log/mysqld.log
改为log-error=/var/log/mysqld.log
- 迁移数据
- 执行
mkdir -p /home/log && touch /home/log/mysqld.log && chown mysql:mysql /home/log -R
- 执行
mkdir -p /home/lib && mv /var/lib/mysql /home/lib/mysql && ln -s /home/lib/mysql /var/lib/mysql && chown mysql:mysql /home/lib/mysql
- 执行
- 关闭权限效验
setenforce 0
- 启动数据库
service mysqld start
- 关闭数据库
迁移数据库目录之后 启动报错
[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
- 重新初始化数据库
mysqld --initialize --user=mysql --datadir=/home/lib/mysql
- 如果提示命令不存在 可以试试
mysqld_safe
注意 此命令会导致数据库数据丢失 记得备份
- 重新初始化数据库
迁移数据库目录之后 提示没有权限的问题处理
- 第一种 提示没有权限
[Warning] Can't create test file /data/mysql/xxxxxx.lower-test
- 请先检查
/data/mysql
的所有者是不是mysql:mysql
- 请先检查
- 第二种 权限没有任何问题 但是还是提示没权限 请根据不同的操作系统执行下列操作
- CentOs 等装有 SELINUX 的系统
- 方案一 执行
setenforce 0
命令 暂时关闭 - 方案二
/etc/selinux/config
修改这个文件 设置SELINUX=disabled
- 方案一 执行
- Ubuntu 等没有
/etc/selinux/config
文件 但是有/etc/apparmor.d/usr.sbin.mysqld
这个文件的- 打开 然后找到
1
2/var/lib/mysql/ r,
/var/lib/mysql/** rwk, - 复制一份 改成
1
2/data/mysql/ r,
/data/mysql/** rwk,
- 打开 然后找到
- CentOs 等装有 SELINUX 的系统
- 第三种 你需要删除
ib_logfile*
在新的数据目录下执行rm -rf ib_logfile*
- 第一种 提示没有权限
错误
Packet for query is too large (2164364 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
- 解决方案: 增大最大包大小
set GLOBAL max_allowed_packet='3M';
- 由于重启后会消失 所以
max_allowed_packet=3M
添加到my.cnf
配置文件
- 解决方案: 增大最大包大小
错误
Data source rejected establishment of connection, message from server: "Too many connections"
- 解决方案: 增加最大连接数
set GLOBAL max_connections=2048;
- 由于重启后会消失 所以
max_connections=2048
添加到my.cnf
配置文件
- 解决方案: 增加最大连接数
错误
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
- 解决方案: 关闭效验
SET GLOBAL log_bin_trust_function_creators=1;
- 由于重启后会消失 所以
log_bin_trust_function_creators=1
添加到my.cnf
配置文件
- 解决方案: 关闭效验
错误
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
- 解决方案: 关闭配置 关闭效验
SET GLOBAL sql_mode='NO_ENGINE_SUBSTITUTION';
- 由于重启后会消失 所以
sql_mode='NO_ENGINE_SUBSTITUTION'
添加到my.cnf
配置文件
- 解决方案: 关闭配置 关闭效验