mysql常见错误之ERROR 1290、1840

前言:

重装mysql5.7.26数据库后,在修改root密码和导入数据时分别了error 1290,1840两个错误,特此记录一下处理过程

错误码1:ERROR 1290

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> alter user ‘root’@’%’ identified by ‘root#2019’;
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
解决方法
mysql> update user set authentication_string=password(‘root2019’),password_expired=‘N’ where user=‘root’;

mysql> flush privileges;

错误码2:ERROR 1840

ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

[root@yjgkserver25 data]# mysql -uroot -p </home/mysql/backup_all_db.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
[root@yjgkserver25 data]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.26-log MySQL Community Server (GPL)

Copyright © 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> show master status;
±----------------±---------±-------------±-----------------±-----------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±----------------±---------±-------------±-----------------±-----------------------------------------+
| mybinlog.000003 | 194 | | | 58561766-b883-11eb-87c1-525400e8d78f:1-2 |
±----------------±---------±-------------±-----------------±-----------------------------------------+

解决方法
mysql> reset master;
mysql> exit
[root@yjgkserver25 data]# mysql -uroot -p </home/mysql/backup_all_db.sql

总结

1、因/etc/my.cnf配置文件的mysqld模块中加入skip-grant-tables参数,所以登录时不需要输入root密码,把root密码修改完成后,需要将该参数注释
2、mysql初始化成功后,在error.log日志里会生成root用户的临时密码,也可以用来初始登陆,即不需要在/etc/my.cnf添加skip-grant-tables参数
3、因重新初始化数据库并开启GTID,原来导出的备份文件包含了set @@GLOBAL.GTID_PURGED=xx,需要在新库执行reset master操作 将@@GLOBAL.GTID_EXECUTED清空才能导入,将备份文件里的set @@GLOBAL.GTID_PURGED=xx删除是不是也可以呢?

<think>嗯,用户遇到了麒麟系统上MySQL启动错误错误代码是2002。首先,我需要回忆一下这个错误通常是什么原因引起的。Error 2002通常和MySQL的连接问题有关,具体来说是“Can't connect to local MySQL server through socket”,也就是无法通过套接字连接到本地MySQL服务器。这可能意味着MySQL服务没有运行,或者套接字文件路径配置有问题,或者权限问题。 接下来,我应该考虑用户使用的系统是麒麟系统,这是基于Linux的,可能类似于CentOS或Ubuntu,但可能有自己的特定配置。需要确保用户检查了MySQL服务的状态,看看是否真的在运行。如果服务没有启动,可能需要查看日志文件来找出启动失败的原因。 然后,套接字文件的路径是否正确。MySQL默认的套接字文件通常是/var/lib/mysql/mysql.sock,但有时候配置文件中可能指定了不同的路径。用户需要检查my.cnf或my.ini中的配置,确认socket的路径是否与实际一致。如果路径不一致,可能需要修改配置文件或者创建符号链接。 权限问题也是一个常见因素。套接字文件和所在目录的权限是否正确,MySQL用户(比如mysql)是否有访问权限。有时候,文件或目录的权限被错误地设置,导致服务无法访问套接字文件。 另外,如果用户修改过配置文件,比如绑定地址或者端口,也可能导致连接问题。需要确认bind-address是否是127.0.0.1或者正确配置,以及是否有其他服务占用了MySQL的端口。 还有,临时文件的问题。比如/tmp目录的权限是否允许MySQL写入套接字文件,或者是否有残留的锁文件,比如ibdata1、ib_logfile等,导致MySQL启动失败。这时候可能需要清理这些文件,但要注意备份数据。 防火墙或SELinux的设置也可能阻止MySQL的正常运行。需要检查防火墙规则是否允许MySQL的端口通信,以及SELinux是否处于 enforcing 模式,导致访问被拒绝。可以暂时关闭SELinux或调整策略来测试。 最后,如果以上步骤都尝试过还是不行,可能需要考虑重新安装MySQL,或者从日志中获取更详细的错误信息,进一步排查问题。用户可能需要提供更多的日志内容,或者检查硬件资源是否足够,比如磁盘空间是否不足,内存是否耗尽等。 在整个过程中,需要指导用户一步步检查,避免遗漏可能的因素。同时要提醒用户在进行任何修改前备份重要数据,防止操作失误导致数据丢失。另外,针对麒麟系统,可能需要特别关注其特有的安全策略或配置,这可能需要查阅相关文档或社区支持。</think>### 麒麟系统 MySQL 启动错误 `ERROR 2002` 分析与解决步骤 **错误说明** MySQL 启动时报错 `ERROR 2002 (HY000): Can't connect to local MySQL server through socket`,通常由以下原因引起: 1. **MySQL 服务未运行** 2. **套接字文件(Socket)路径配置错误** 3. **权限问题**(套接字文件或目录权限不足) 4. **配置文件冲突**(如端口占用、绑定地址错误) 5. **临时文件残留**(如 `ibdata1`、`ib_logfile` 损坏) --- ### 逐步排查与解决方法 #### 步骤 1:检查 MySQL 服务状态 ```bash systemctl status mysql # 或 mysqld(取决于安装名称) ``` - **若服务未运行**:尝试启动服务 ```bash systemctl start mysql ``` - **若启动失败**:查看日志定位原因 ```bash journalctl -u mysql -n 50 --no-pager # 查看最近 50 条日志 ``` --- #### 步骤 2:检查套接字文件路径 1. **确认 MySQL 配置文件中 `socket` 路径** 打开配置文件(默认路径): ```bash vim /etc/my.cnf # 或 /etc/mysql/my.cnf ``` 检查 `[mysqld]` 和 `[client]` 下的 `socket` 配置是否一致,例如: ```ini [mysqld] socket = /var/lib/mysql/mysql.sock [client] socket = /var/lib/mysql/mysql.sock ``` 2. **验证套接字文件是否存在** ```bash ls -l /var/lib/mysql/mysql.sock ``` - 若文件不存在:需启动 MySQL 服务自动生成。 - 若路径不一致:修改配置文件或创建符号链接(需重启服务): ```bash ln -s /实际路径/mysql.sock /var/lib/mysql/mysql.sock ``` --- #### 步骤 3:检查文件权限 确保套接文件及目录权限属于 `mysql` 用户: ```bash chown -R mysql:mysql /var/lib/mysql # 修改目录所有者 chmod 755 /var/lib/mysql # 设置目录权限 ``` --- #### 步骤 4:清理临时文件(谨慎操作!) **仅当确认数据已备份时执行!** 停止 MySQL 服务后,清理残留文件: ```bash systemctl stop mysql rm -f /var/lib/mysql/ibdata1 rm -f /var/lib/mysql/ib_logfile* systemctl start mysql ``` --- #### 步骤 5:检查端口与绑定地址 1. **确认端口未被占用** ```bash netstat -tulnp | grep 3306 ``` 2. **检查 `bind-address` 配置** 确保 `my.cnf` 中未错误绑定到外部 IP: ```ini [mysqld] bind-address = 127.0.0.1 # 仅允许本地连接 ``` --- #### 步骤 6:检查防火墙与 SELinux 1. **临时关闭防火墙** ```bash systemctl stop firewalld # 麒麟系统通常使用 firewalld ``` 2. **禁用 SELinux** ```bash setenforce 0 # 临时关闭 ``` 若问题解决,需调整 SELinux 策略或永久关闭(不推荐): ```bash vim /etc/selinux/config # 修改为 SELINUX=disabled ``` --- #### 步骤 7:重新安装 MySQL(终极方案) 1. **备份数据** ```bash mysqldump -u root -p --all-databases > backup.sql ``` 2. **卸载并重装 MySQL** ```bash systemctl stop mysql yum remove mysql-server # 根据实际安装方式调整 yum install mysql-server systemctl start mysql ``` --- ### 总结 按优先级排查顺序: 1. 服务状态 → 2. 套接字路径 → 3. 权限 → 4. 配置文件 → 5. 防火墙/SELinux → 6. 重装。 若仍无法解决,请提供完整错误日志以进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值