Ubuntu 16.04下mysql_secure_installation执行后未修改表求助
mysql_secure_installation及SQL语句无效果的问题 我之前在Ubuntu 16.04上部署MariaDB(10.0.x版本)的时候也碰到过类似的诡异问题——执行mysql_secure_installation没报错,但用户表完全没变化,手动跑SQL也是毫无动静,仿佛语句根本没执行。下面是我试过的几个有效排查和解决方法,你可以一步步来:
确认你连接的是正确的MariaDB实例
有时候系统里可能残留了旧的数据库进程,或者你无意中连接到了非本地的实例。先检查当前运行的MariaDB服务状态:sudo systemctl status mysql确保只有一个实例在运行。然后登录时明确指定本地socket,避免连接偏差:
mysql -u root -p -S /var/run/mysqld/mysqld.sock检查事务自动提交状态
部分场景下InnoDB的自动提交可能被关闭了,导致你执行的修改语句只是在内存里,没有持久化到磁盘。登录MariaDB后执行:SELECT @@autocommit;如果返回结果是
0,说明自动提交关闭了。这时候你执行完修改SQL后,必须手动执行COMMIT;才能让修改生效。比如修改root密码后,要加一句COMMIT;再退出。手动模拟
mysql_secure_installation的操作
有时候这个脚本可能因为环境变量或者权限问题没正确执行,你可以手动执行它的核心步骤,同时观察执行结果:- 设置root密码(根据MariaDB版本选择语句):
-- 适用于较新版本 ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; -- 如果上面报错,用旧版本语法 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码'); - 删除匿名用户:
DROP USER ''@'localhost'; - 清理root的远程登录权限(可选,根据你的需求):
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); - 删除test数据库:
DROP DATABASE test; - 刷新权限:
FLUSH PRIVILEGES;
执行完这些后,用
SELECT User, Host FROM mysql.user;查看用户表是否有变化,记得如果autocommit是关闭状态要执行COMMIT;。- 设置root密码(根据MariaDB版本选择语句):
检查MariaDB数据目录的权限
如果数据目录的权限不属于mysql用户,MariaDB可能无法将修改写入磁盘。检查数据目录权限:ls -ld /var/lib/mysql/正常情况下,所有者和组都应该是
mysql。如果权限不对,修复后重启服务:sudo chown -R mysql:mysql /var/lib/mysql/ sudo systemctl restart mysql检查是否开启了只读模式
偶尔会碰到配置错误导致数据库进入只读状态,执行以下语句确认:SELECT @@read_only;如果返回
1,说明是只读模式。你需要修改MariaDB的配置文件(通常是/etc/mysql/mariadb.conf.d/50-server.cnf或者/etc/mysql/my.cnf),找到read_only参数并设置为0,然后重启服务:sudo systemctl restart mysql确认当前登录用户的权限
有时候你以为自己用root登录,但实际可能用了普通用户。登录后执行以下语句确认:SELECT CURRENT_USER(); SELECT USER();确保当前用户是
root@localhost或者拥有SUPER权限的用户,否则无法修改用户表。
内容的提问来源于stack exchange,提问作者uzla

