如何“安全地”终止mysqld?

时间:2019-05-01 18:44:19

标签: mysql cygwin

我正在关注mysql on Cygwin

# To begin MySQL setup run the following:
mysql_install_db

# Run mysql - you'll get a firewall alert from windows if you have it active.
mysqld_safe &

# Immediately following that, it would be wise to run the following:
mysql_secure_installation

mysql_install_db期间,有人问我要使用谁的数据库(DB)。我指定了一个非管理员帐户nonadmin

对于mysql_secure_installation过程,我遵循了类似的名称MariaDB page。与描述相反,我被告知我没有root密码,因此我将其设置为与cygwin和Windows管理员帐户相同的密码。

我无法确定上面三个命令中的每个命令是否都使用了哪个帐户,但这是我所记得的:

  • mysql_install_db:nonadmin身份运行,但提示输入管理员密码

  • mysqld_safe:nonadmin

  • 运行
  • mysql_secure_installation :尝试使用nonadmin,被放弃并 以管理员帐户admin

  • 完成

似乎我应该在最后一步之后重新启动服务器。使用ps -ef,我注意到进程mysqld属于nonadmin。使用nonadmin,我在mysql on Cygwin尝试了mysqladmin shutdown命令。我得到:

mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'nonadmin'@'localhost' (using password: NO)'

我尝试了提示用户输入密码的命令的变体:mysqladmin -p shutdown。我做了两次,输入nonadminadmin的cygwin / windows密码。两次,我得到:

mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'nonadmin'@'localhost' (using password: YES)'

总共3次尝试。然后,我切换到admin帐户并重试了所有3次尝试。我收到了以上消息,但用户名为admin

mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'admin'@'localhost' (using password: NO)'

mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'admin'@'localhost' (using password: YES)'

所以连接到守护程序以关闭它没有任何乐趣。作为替代方案,我想避免用mysqld破坏kill -9,因为我希望事物可以干净地终止(尽管我可能很快就会这样做)。

作为另一种选择,我遇到了对/etc/init.d的引用,但是我没有这样的文件。

谁能解释为什么我无法连接到守护程序以将其关闭?

此外,我是MySQL的新手,所以,如果可能的话,最好在mysql on Cygwin找到一种回到该过程的方法,而不是过多地偏离它。

谢谢。

1 个答案:

答案 0 :(得分:0)

我最终所做的是在kill -9所示的所有mysql外观进程上都是ps -ef。然后,我删除了/var/lib/mysql-并意外删除了所有/var/lib/*。因此,随后,我重新安装了所有Cygwin软件包,从而从干净的状态开始。

我还在this alaya page处发现了以下更详细的过程,用于在Cygwin上安装MySQL / MariaDB数据库,之后我 能够关闭MySQL服务器。

  

从管理员终端运行:

mysql_install_db
  

启动mysql服务器:

mysqld_safe &
  

然后运行:

mysql_secure_installation
  

然后,您应该能够使用以下命令从非管理外壳登录到MariaDB:

mysql -u root -p

最初的mysql_install_db步骤会生成以下有用的信息,我在这里捕获了这些信息,因为我不确定是否有办法再次获得它。

Installing MariaDB/MySQL system tables in '/var/lib/mysql' ...
2019-05-01 23:00:06 0 [Warning] InnoDB: innodb_open_files 300 should not be greaterthan the open_files_limit 256
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system


PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/usr/bin/mysqladmin' -u root password 'new-password'
'/usr/bin/mysqladmin' -u root -h fmaPC password 'new-password'

Alternatively you can run:
'/usr/bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '/usr' ; /usr/bin/mysqld_safe --datadir='/var/lib/mysql'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/usr/mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

mysql_secure_installation步骤中,我按照建议设置了root密码。然后,除了执行mysql -u root -p步骤之外,我还可以发出以下命令来停止MySQL服务器:

mysqladmin -u root -p shutdown

我从没有管理员权限的用户的角度对此过程进行了重要发现。与上面引用的alaya页上所建议的相反,上面的过程不是必须通过管理员帐户完成的。重要的是,可以用来连接MySQL服务器的用户帐户与主机系统(Windows或* nix)上的用户帐户无关(这是我从研究MariaDB知识库中获得的事实)。我怀疑主机系统上的任何用户都可以通过它显示的[1]套接字使用正确的密码连接到服务器上的任何用户帐户。

我还发现上述过程可在具有非常严格的Windows防火墙策略的计算机上运行。即使服务器(mysqld_safe &步骤)和客户端(mysql -u root -p步骤)是从同一个非管理帐户启动的,Windows防火墙也会发出有关缩减某些功能的警告。我怀疑触发器是创建用于连接服务器的套接字。尽管有警告,但是ps -ef显示服务器正在运行。因此,我怀疑防火墙的限制仅包括环回连接。 mysql_secure_installation步骤显然禁止了外部连接,我发现在执行此步骤之后,停止并重新启动服务器将不再触发防火墙警告。因此,mysql_secure_installation的影响似乎会持续存在于后续的sqld启动中,至少在通过mysqld_safe启动时是这样。

[1]“现在”在这里可能不是正确的术语,因为我更是分析师,而不是开发人员或管理员。