我有两个 MySQL 服务器在运行(127.0.0.1:3306 和 127.0.0.1:3307)。现在我收到这个奇怪的错误:mysql_connect(): Lost connection to MySQL server at 'reading initial communication packet'
我可以连接localhost:3307
,但没有任何表/数据库。我很确定/etc/my.cnf
是对的:
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = root
password = ***
[mysqld]
port = 3306
socket = /var/run/mysql/mysql.sock
[mysqld2]
port = 3307
socket = /var/run/mysql/mysql2.sock
Run Code Online (Sandbox Code Playgroud)
我现在能做什么?我怎样才能理智地重新启动 MySQL 服务器?
也许更重要的是:
如何确保所有表仍然存在?
我很快发现缺少一件事:每个 [mysqld] 都需要有自己的 datadir。两个 mysqld 组不能共享相同的 datadir。您需要在不同的文件夹中分配不同的数据目录,并确保在所有数据目录上运行“chown -R mysql:mysql(数据目录文件夹)”。
你的 /etc/my.cnf 应该看起来像这样:
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = root
password = ***
[mysqld]
port = 3306
datadir = /var/lib/mysql1
socket = /var/run/mysql/mysql.sock
[mysqld2]
port = 3307
datadir = /var/lib/mysql2
socket = /var/run/mysql/mysql2.sock
Run Code Online (Sandbox Code Playgroud)
查看来自 Pythian Group 的链接,了解如何启动和停止各个数据库服务。
从我的回答中,您应该看到/var/lib/mysql1、/var/lib/mysql2等中必须有完整的数据副本。