如何以编程方式重置Mysql 5.7 root密码

时间:2017-02-26 17:37:03

标签: mysql

如何以编程方式重置MySQL中的root密码,特别是在Ubuntu / Debian上?

似乎有a lot这样的问题,但很少,如果有任何解决方案有效,并且都假设您手动运行这些示例。

我正在尝试为应用程序编写安装脚本,我发现几乎不可能自动设置MySQL密码。我的目标操作系统是Ubuntu 16,它带有MySQL 5.7.17。 official docs列出了两种更改root密码的方法,不幸的是,它们都没有工作。

提出的第一种方法是将密码重置SQL放在临时文件中,停止mysql,然后运行:

mysqld_safe --init-file=/home/me/mysql-init &

不幸的是,MySQL 5.7.17不再列出--init-file选项,虽然该命令不会引发错误,但它对root密码没有影响。

提出的第二种方法是停止mysql,并以允许任何本地用户登录并执行任何操作的模式启动它,但运行:

sudo mkdir -p /var/run/mysqld
sudo chown mysql /var/run/mysqld; mysqld_safe --skip-grant-tables &
sudo mysqld_safe --skip-grant-tables &
sleep 10
mysql --execute="FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysupersecretpassword'; FLUSH PRIVILEGES;"

然而,10次中有9次失败并出现错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

我无法确定是什么导致了这一点。起初,我认为这是因为我没有给mysqld_safe足够的时间来启动,但即使我提高睡眠值,我仍然经常得到错误。每次我手动运行相同的命令时,它总是成功,但是当我运行我的脚本时,它们会失败,而error.log什么都不显示。

我之前使用的方法是预先播种dpkg,如:

sudo dpkg --configure -a
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password mysupersecretpassword'
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password mysupersecretpassword'

因此在最初安装mysql-server包时会自动填写密码。但是,首次安装时,Ubuntu 16软件包似乎不再提示输入root密码。

我该如何解决这个问题?这有一种更可靠的方式来以编程方式重置MySQL的root密码吗?

0 个答案:

没有答案