Mysql 二进制安装常见问题
1. mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
在centos9中升级了libncurses.so的版本为libncurses.so.6,所以找不到libncurses.so.5
需要使用软连接指向libncurses.so.6
ln -s /lib64/libncurses.so.6 /lib64/libncurses.so.5
2.MySQL安装后,在/tmp/mysqld.log中找不到MySQL密码?
出现以上问题的主要原因有两种情况:① 计算机本身安装过MySQL软件,重复安装导致初始化失败 ② 数据库配置异常,忘记创建账号,目录异常等等都可能初始化失败了
初始化成功,在MySQL内部,会产生一个data目录,里面最少要包含mysql文件夹(内置mysql数据库,包含账号、系统等信息)
cd /export/server/mysql
ll data
drwxr-x--- 2 mysql mysql 4096 Apr 20 14:34 '#innodb_redo'
drwxr-x--- 2 mysql mysql 187 Apr 20 14:34 '#innodb_temp'
drwxr-x--- 2 mysql mysql 143 Apr 20 11:06 mysql
-rw-r----- 1 mysql mysql 6 Apr 20 14:34 mysqld.pid
-rw-r----- 1 mysql mysql 26214400 Apr 20 14:34 mysql.ibd
drwxr-x--- 2 mysql mysql 8192 Apr 20 11:06 performance_schema
如果没有这些目录或者文件,就是初始化失败了。
解决方案:删除data目录,然后重新初始化
cd export/server/mysql
rm -rf data
bin/mysqld --initialize --user=mysql --basedir=/export/server/mysql &>/tmp/mysqld.log
3.MySQL连接报错,ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
出现以上问题的主要原因,可能是MySQL软件没有启动 或者 MySQL已经异常启动,但是没有产生套接字。
MySQL软件没有启动
systemctl status mysqldll /tmp systemctl start mysqld
MySQL已经异常启动,但是没有产生套接字
先尝试使用systemctl终止mysqld服务
systemctl stop mysqld强制终止mysqld(生产环境慎用)
pkill mysqldsystemctl start mysqld
4.mysql忘记密码解决方案
4.1停止mysql服务
systemctl stop mysqld
4.2以无授权模式启动mysqld
无授权模式,就是客户端连接mysql服务器端不进行密码验证。
mysqld_safe --skip-grant-tables &mysqld_safe:其实就是mysql进程,systemctl start mysqld相当于授权模式启动mysqld_safe
--skip-grant-tables:跳过密码验证
&:后台运行,不会影响命令行其他命令运行&:发音and符号,如果写在某个命令的后面,代表后台运行
4.3登录mysql并重置密码(只能把密码置空!!!)
mysql8.0.40版本,不允许在非授权模式直接更改密码,我们只能把密码置空!!!
mysql -u root
回车mysql> UPDATE mysql.user SET authentication_string='' WHERE user='root';
mysql> FLUSH PRIVILEGES;
123叫做明文密码,特别不安全,密码存储在数据库中MySQL可以采用加密保存方式!!!
4.4关闭mysqld服务,正常启动mysqld
1. 查看后台运行进程
jobs2. 终止后台编号为1的进程
kill %13. 重启MySQL
systemctl stop mysqld
systemctl start mysqld
4.5重置密码
mysql -uroot -p
回车mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; 或 set password='123456';
mysql> flush privileges;