非常感谢您的帮助。使用 Ubuntu 22.04 和 MySQL 8。
我在外部硬盘上有一个旧版 MySQL DB,在我的 Ubuntu 机器上也有一个本地安装,两者都使用 MySQL 8。
我设置了一个 Docker 容器,MySQL 映像连接到旧数据库以转储数据以供其他地方使用。这没有问题,但现在我无法连接到现有的本地 MySQL 安装。
启动 MySQL 的标准调用返回错误,指出无法通过套接字连接:
chris@chris-X1C6:/etc/mysql$ mysql -u admin -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
我检查了服务器是否正在运行,重新启动了 MySQL 和系统,但都无济于事。我还编辑了配置文件 ( ) 以指定套接字文件的位置(.sock 文件实际存在的位置),并尝试在本地安装 ( ) 中在指定文件和 sock 文件的实际位置/etc/mysql/my.cnf
之间创建符号链接。这些都不允许我连接,错误消息现在显示为:/tmp/mysql.sock
/var/lib/mysql/mysql.sock
chris@chris-X1C6:/etc/mysql$ mysql -u admin -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)
经过反复尝试才能够访问外部驱动器上的数据(即指定数据在 Docker 中的位置),因此我很可能在它仍指向我的本地安装目录时无意中通过 Docker 连接到了 MySQL 映像。不确定这是否会/如何弄乱设置/配置,但自从使用 Docker 以来就无法连接,所以想知道这可能有什么关系。
非常感谢任何关于解决或调试的想法。
答案1
我有点不明白你为什么之前要设置一个新的 Docker 容器,我理解切换到容器。你应该使用它mysqldump
来创建数据库转储,然后使用以下命令在容器中恢复它:
cat dump.sql | docker exec -i <container_name> mysql --protocol tcp -uroot -p<rootpw> yourdbname
对于 sock 内容,您只需使用 TCP 监听并在本地主机上监听并使用 mysql-h
参数连接,例如:
mysql -h 127.0.0.1 -uroot -p
数据库转储也非常简单:
mysqldump -uroot -p --all-databases > dump.sql
或者
mysqldump -uroot -p yourdbname > dump.sql