【MySql-Command】-MySql-Enter

连接到MySql


格式: mysql -h主机地址 -u用户名 -p用户密码


1、连接到本机上的MYSQL:


首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。


如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>

2、连接到远程主机上的MYSQL:

假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。

则键入以下命令:

mysql -h110.110.110.110 -u root -p 123;

(注:u与root之间可以不用加空格,其它也一样)


3、退出MYSQL命令: 

exit (回车)


修改密码:


格式:mysqladmin -u用户名 -p旧密码 password 新密码

1、给root加个密码root2

首先在DOS下进入目录mysql\bin,然后键入以下命令
    mysqladmin -u root -password root2
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

2、再将root的密码改为djg345。
    mysqladmin -u root -p root2 password root3

增加新用户:

注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符

格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”

1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。
     首先用root用户连入MYSQL,然后键入以下命令:
     
     grant select,insert,update,delete on *.* to [email=test1@”%]test1@”%[/email]” Identified by “abc”;

但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了

2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机)
    这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
    grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “abc”;

     如果你不想test2有密码,可以再打一个命令将密码消掉。
    grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “”;


<think>好的,用户遇到了在使用Docker运行MySQL 8.0.26时,即使正确设置了MYSQL_ROOT_PASSWORD,仍然无法通过root用户和密码登录的问题。我需要仔细分析可能的原因,并提供解决方案。 首先,用户的命令看起来是正确的,设置了密码为'Shi123456',映射了端口和卷,并且指定了字符集。但登录时出现ERROR 1045,可能的问题点有几个方面: 1. **密码复杂性要求**:MySQL 8默认启用了密码策略,可能用户设置的密码不符合要求,导致虽然容器启动,但实际密码未被正确应用。需要检查MySQL的日志,确认是否有相关错误。 2. **卷挂载问题**:用户挂载了~/mysql/conf.d到容器的/etc/mysql/conf.d,如果该目录下有自定义配置文件,可能与MySQL的默认配置冲突,导致认证插件或其他设置改变。比如,默认的caching_sha2_password插件可能导致旧客户端无法连接,但这里用户使用的是MySQL命令行工具,应该支持。 3. **密码特殊字符处理**:虽然用户用了单引号,但可能在密码中有特殊字符需要转义,但根据提供的密码'Shi123456',看起来没有特殊字符,可能性较低。 4. **初始化过程失败**:可能在容器启动时,初始化脚本由于某种原因未能正确设置密码,需要查看容器日志确认是否有错误信息。 5. **缓存或旧数据问题**:如果之前运行过同名容器,并且挂载了相同的卷mysql_data,可能导致旧密码仍然存在,而新设置的密码未生效。需要确认是否清理了旧数据。 接下来,我需要逐步指导用户进行排查: - **查看容器日志**:使用docker logs mysql8检查启动过程中是否有错误,特别是关于密码设置的提示。 - **验证密码策略**:如果日志显示密码不符合策略,建议用户使用更复杂的密码,包含大小写字母、数字和特殊字符。 - **检查配置文件**:确认挂载的conf.d目录下的配置文件是否修改了默认的认证插件或其他安全设置,导致root用户无法通过密码登录。 - **清理持久化数据**:如果之前有数据残留,可能需要删除旧的mysql_data卷,重新创建容器。 - **进入容器检查环境变量**:确认MYSQL_ROOT_PASSWORD是否正确设置,可以通过docker exec mysql8 env | grep MYSQL_ROOT_PASSWORD查看。 - **临时关闭密码验证**:作为调试步骤,可以尝试修改启动命令,暂时禁用密码策略,但这不适合生产环境。 另外,用户两次尝试登录的方式,第一次交互式输入密码,第二次直接在命令行指定密码,但都失败,排除了输入错误的情况。可能问题出在MySQL服务端配置或初始化过程。 最后,建议用户尝试使用更复杂的密码,清理旧数据,检查配置文件,并查看日志,以定位具体原因。</think>--- ### 🔍 问题分析 您在使用 Docker 运行 MySQL 8.0.26 时遇到了 `ERROR 1045` 访问拒绝问题,尽管已设置 `MYSQL_ROOT_PASSWORD='Shi123456'`。以下是逐步排查方案: --- ### 🚦 第一步:检查容器日志 ```bash docker logs mysql8 | grep -i "password" ``` 重点关注以下信息: - `A temporary password is generated for root@localhost`(若出现说明使用了随机密码- `root password is empty`(密码未正确设置) - `Failed to initialize database`(数据库初始化失败) --- ### 🔥 最可能原因:MySQL 8 密码策略 MySQL 8 默认启用密码复杂度验证(`validate_password` 组件),`Shi123456` 可能**不符合密码策略**: - 必须包含大小写字母 - 必须包含数字 - 必须包含特殊字符 - 最小长度 8 #### ✅ 解决方案 使用更复杂的密码(例如 `Shi@123456`): ```bash docker run -d --name mysql8_new \ -e MYSQL_ROOT_PASSWORD='Shi@123456' \ -v mysql_data_new:/var/lib/mysql \ mysql:8.0.26 ``` --- ### 🗑️ 第二步:清理残留数据 **原容器可能残留了旧配置**(尤其注意您使用了已存在的 `mysql_data` 卷): ```bash # 停止并删除旧容器 docker stop mysql8 && docker rm mysql8 # 删除旧数据卷(谨慎操作!会永久丢失数据) docker volume rm mysql_data # 重新运行容器(自动创建新卷) docker run -d --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD='Shi@123456' \ -v ~/mysql/conf.d:/etc/mysql/conf.d \ -v mysql_data:/var/lib/mysql \ mysql:8.0.26 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci ``` --- ### 📂 第三步:检查配置文件冲突 您挂载的 `~/mysql/conf.d` 目录中的自定义配置文件可能覆盖了认证设置。**临时测试时可先移除配置挂载**: ```bash # 删除或重命名原配置目录 mv ~/mysql/conf.d ~/mysql/conf.d.backup # 重新运行容器(不使用外部配置) docker run -d --name mysql8_test \ -e MYSQL_ROOT_PASSWORD='Shi@123456' \ mysql:8.0.26 ``` --- ### 🔧 高级调试方法 #### 1. 进入容器检查环境变量 ```bash docker exec mysql8 env | grep MYSQL_ROOT_PASSWORD ``` 确认环境变量值是否为 `Shi123456` #### 2. 强制重置密码(需重启容器) ```bash # 在启动命令中添加 --skip-grant-tables docker run -d --name mysql8_reset \ -e MYSQL_ROOT_PASSWORD='Shi@123456' \ mysql:8.0.26 \ --skip-grant-tables \ --character-set-server=utf8mb4 # 进入容器修改密码 docker exec -it mysql8_reset mysql -uroot ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'NewPass@123'; FLUSH PRIVILEGES; ``` --- ### 📍 验证连接的正确姿势 ```bash # 安全输入密码方式(避免在命令行显示密码) docker exec -it mysql8 mysql -uroot -p # 然后交互式输入密码 ``` --- ### ⚠️ 生产环境建议 1. **使用 Docker Secrets 管理密码** 2. **启用 SSL 加密连接** 3. **定期备份数据卷** 4. **配置 proper 的密码策略**(通过 `my.cnf`): ```ini [mysqld] validate_password.policy=MEDIUM validate_password.length=10 validate_password.mixed_case_count=1 validate_password.special_char_count=1 ``` --- 如果问题仍未解决,请提供容器日志的完整输出(隐藏敏感信息后),我们可以进一步分析具体错误原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值