mysql - 导入后,mysqldump 无法使用 root 或任何创建的用户访问 MySQL
问题描述
背景:我使用vagrant(Ubuntu 18.04)创建我的开发环境,我正在安装PHP,MySQL和其他东西,但最近我遇到了我可以访问mysql的问题,然后我得到了经典错误:
错误 1045 (28000): 用户 'root'@'localhost' 的访问被拒绝(使用密码:否)
使用sudo mysql
或
错误 1045 (28000): 用户 'otheruser'@'localhost' 的访问被拒绝(使用密码:是)
尝试的时候mysql -u otheruser -p
问题是 MySQL 对于一些“vagrant up”和“vagrant halt”工作正常,但由于某种原因,当我再次启动该机器时,我无法再访问 MySQL。我知道我可以重置 MySQL 根密码、删除 MySQL 或执行其他快速解决方案,但最重要的是我想知道问题的原因是什么,因为起初我在考虑与我对我的更新所做的更新有关的事情vagrant box,或者 Ubuntu 上的更新。
当我使用 Ubuntu 在那个 Box 上安装 mysql 时,我使用 .sh 文件来自动化该过程,这里是 mysql 的部分:
# Mysql Instalation
sudo apt install mysql-server -y
sudo mysql_secure_installation
sudo mysql < setup.sql
和 setup.sql :
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';
FLUSH PRIVILEGES;
CREATE USER 'otheruser'@'localhost' IDENTIFIED BY 'otherpassword';
GRANT ALL PRIVILEGES ON * . * TO 'otheruser'@'localhost';
FLUSH PRIVILEGES;
然后我试图找出问题所在并尝试解决它,首先我在 setup.sql 文件中注释了 root 语句的行,然后在 .sh 文件中注释了“mysql_secure_installation”行,但问题仍然存在;所以为了快速解决,我破坏了盒子然后我再次创建它,但这变得很无聊,所以我在这里描述我的问题。
所以恢复的问题是:
- 问题的原因可能是什么?所以我可以在未来的盒子创作中解决它。
- 解决此类问题的最佳方法是什么。
因为每次出现问题时创建和销毁盒子都是压倒性的,最重要的是,当我将应用程序移动到生产服务器时,我不希望出现这种问题。
感谢您花时间阅读本文。祝你今天过得愉快。
2020 年 2 月 6 日更新
在查看我的部署过程以查找有关该问题的更多信息后,我发现问题是从我的生产服务器的 mysqldump 导入时开始的;就在导入之后vagrant halt
并vagrant up
一次又一次地出现问题,所以我无法再次登录 MySQL。
这是我的 mysqldump 过程和我的导入过程,以帮助是否有问题。
带有 Ubuntu 16.04 MySQL 5.7.29 的生产服务器
mysqldump -u root -p --all-databases > alldb_04-02-2020.sql
带有 Ubuntu 18.04 MySQL 5.7.29 的 Vagrant Box
mysql -u otheruser -p < alldb_04-02-2020.sql
解决方案
推荐阅读
- python - 从 2D df 中提取并在 python 中将值添加到 1D df
- django - Django rest框架:Social Auth + JWT:首选哪些第三方包来实现这一点
- java - 如何重置二维数组中的计数器
- apache-kafka-connect - Confluent AvroSourceConnector
- javascript - 如何让我的 javascript 等待数组填充?
- testing - 如何测试组件“ng2-file-drop”?
- android - 当用户选择并提交到firebase时如何获取chipgroup值?
- python - 在 AWS S3 上将 CSV 文件合并到 XLS 或 XLSX
- django - Django REST Api 安全架构
- java - 现有的自动化测试框架 (Java) 每天晚上运行 E2E 测试还是从头开始创建应用程序?