以我最常用的 Ubuntu 为例,记录如何重置 MariaDB root 密码。MariaDB 是 MySQL 原作者在 MySQL 闭源之后的再起之作,基本能完全兼容 MySQL。在我的 Ubuntu 上,它的大部分命名都沿用 MySQL。
1. 停掉 mysql 服务
$ service mysql stop
2. 以特殊方式启动 mysql
使用 --skip-grant-tables
可以跳过用户权限检查,让你没有密码也能连接。此时为了避免安全问题,可以加上 --skip-networking
,防止有人此时通过网络连接你的数据库。在本地环境下差别不大。
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
这一步可能会启动失败,导致下一步连接时报错:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ’/var/run/mysqld/mysqld.sock’ (2)
,此时,可以这样修正:
$ sudo mkdir /var/run/mysqld
$ sudo chown mysql /var/run/mysqld
3. 连接数据库
$ mysql -u root
正常情况下就连上了。
4. 重置密码
mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
5. 重启 mysql
按照参考文档里介绍的做法,需要
$ sudo kill `cat /var/run/mysqld/mysqld.pid`
# 或
$ sudo kill `/var/run/mariadb/mariadb.pid`
不过我实际操作的时候只要把(2)开启的进程关掉就好了。然后重启 mysql 服务:
$ service mysql restart
6. 完成
尝试一下连接,应该可以成功了:
$ mysql -uroot -p
7. Ghost 连接
虽然命令行连接成功,但是 ghost start
仍然报错,经查,是 Ghost 的数据库连接方式有点问题,修改 config.production.json
,加入一行配置即可,大体如下:
{
"client": "mysql",
"connection": {
....
"socketPath": "/var/run/mysqld/mysqld.sock",
}
}
欢迎吐槽,共同进步