由于重启服务器导致MySQL数据库启动不了,折腾了一天弄好了,记录下经验:
环境 :centos7 MySQL5.6
本文包括:
一、启动MySQL是卡死不动的排查方式。
二、完全卸载MySQL的方法
三、阿里云上安装配置MySQL
四、MySQL重新安装后数据恢复
一、启动MySQL是卡死不动的排查方式。
启动mysql卡死不动
[root@~]# service mysqld start
Redirecting to /bin/systemctl start mysqld.service
排查1、之前好使,突然不好使了。
[root@~]#cd /var/lib/mysql
[root@~]#ls -l
-rw-rw---- 1 mysql mysql 56 Jul 30 19:03 auto.cnf
-rw-rw---- 1 root root 79691776 Jul 31 00:36 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Jul 31 00:36 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Jul 31 00:34 ib_logfile1
drwx------ 2 mysql mysql 4096 Jul 30 19:03 mysql
srwxrwxrwx 1 mysql mysql 0 Jul 31 00:36 mysql.sock
drwx------ 2 mysql mysql 4096 Jul 30 19:03 performance_schema
1、正常情况下用户权限都是 ‘mysql’ ,异常退出后可能就变成‘root’了
授予mysql权限 chown -R mysql.mysql /var/run/mysqld/
执行后再ls -l 看下,没有更改成功就用 chown mysql.mysql <文件名> 单独配置一遍,文件夹里边的文件不要忘记看。
2、注意/var/lib/mysql目录中的权限都是文件660(-rw-rw---- ),文件夹是700(drwx------),如果不对要用chmod 660 <文件名> chmod 700 <文件名> 对文件或文件夹进行权限管理
发现上述两个问题并改正后,再重启数据库试试,还是不行就继续往下排查。
排查2:根据log文件排查
[root@~]#cat /var/log/mysqld.log (默认mysql日志的安装路径)
如果你只想看到错误信息,可以使用cat /var/log/mysqld.log | grep ‘ERROR’命令查看
我在log中发现一个问题不认识 default-character-set=utf8
原本想在MySQL 配置文件/etc/my.cnf中加入default-character-set=utf8 将数据库字符集设置为 utf8,结果不能启动了,注释掉后一切正常。
查看/etc/my.cnf 文件中如果有字符集设置的语句不妨先注释掉再service mysqld start试试
排查3:setenforce 0 #关闭selinux
selinux可能开启导致权限不够,这玩意干嘛的我也不会,先关掉再说。
二、完全卸载MySQL的方法
上边的方法解决不了了,可以考虑重新安装mysql.
1、备份
将/var/lib/mysql文件夹中的数据除了mysql文件夹全部拷贝出去,留着恢复。
2、完全卸载
[root@~]#yum remove mysql mysql-server
[root@~]#find / -name mysql 将找到的相关东西delete掉;
[root@~]#mv /var/lib/mysql /var/lib/mysql_old_backup#或者直接删除
[root@~]#rpm -qa|grep mysql(查询出来的全部yum remove掉)
三、阿里云上安装配置MySQL(系统:阿里云centos7)
建议按照自己之前的方式安装,保持两次的版本一样,避免数据恢复失败的可能。
[root@~]#rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm ####新增yum源
[root@~]# yum repolist enabled | grep "mysql.*-community.*" #####查看可用的mysql版本
[root@~]# yum -y install mysql-community-server
[root@~]# systemctl enable mysqld #######启动mysql服务进程
[root@~]# systemctl start mysqld #######配置mysql(设置密码等)
[root@~]# mysql_secure_installation #######配置初始信息
配置步骤
Enter current password for root (enter for none):<–初次运行直接回车
OK, successfully used password, moving on...
Set root password? [Y/n] Y<– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
Password updated successfully!
Reloading privilege tables..
... Success!
Remove anonymous users? [Y/n] <– 是否删除匿名用户,生产环境建议删除,所以直接回车
... Success!
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,根据自己的需求选择Y/n并回车,建议禁止
... Success!
Remove test database and access to it? [Y/n] <– 是否删除test数据库,直接回车
- Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
... Failed! Not critical, keep moving...
- Removing privileges on test database...
... Success!
Reload privilege tables now? [Y/n]<– 是否重新加载权限表,直接回车
... Success!
如果需要外网可以访问需要再做如下设置:授权用户可以从远程登陆
[root@~]# mysql -u root -p ###进入mysql
Enter password: ###输入刚刚设置的密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 5.6.39 MySQL Community Server (GPL)
。。。。。。
mysql> use mysql; ####使用mysql数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select host,user,password from user; #####查看user表
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *80A84E4759FEC49969DA411756A51BB3FEC9B72C |
| 127.0.0.1 | root | *80A84E4759FEC49969DA411756A51BB3FEC9B72C |
| ::1 | root | *80A84E4759FEC49969DA411756A51BB3FEC9B72C |
+-----------+------+-------------------------------------------+
3 rows in set (0.00 sec)
可以看到在user表中已创建的root用户。host字段表示登录的主机,其值可以用IP,也可用主机名,
(1)有时想用本地IP登录,那么可以将以上的Host值改为自己的Ip即可。
实现远程连接(授权法)
将host字段的值改为%就表示在任何客户端机器上能以root用户登录到mysql服务器,建议在开发时设为%。
update user set host = '%' where user = 'root';
将权限改为ALL PRIVILEGES
//修改访问权限,让其他计算机也能访问
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword ' WITH GRANT OPTION; -->yourpassword 此处输入自己设置的密码
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| % | root | *D4CECBA84F0A507325CD8AA82FCDE04EA8BE56B0 |
| 127.0.0.1 | root | *80A84E4759FEC49969DA411756A51BB3FEC9B72C |
| ::1 | root | *80A84E4759FEC49969DA411756A51BB3FEC9B72C |
+-----------+------+-------------------------------------------+
3 rows in set (0.00 sec)
*在控制台中 安全组配置 添加 3306 端口,不然外网不能访问端口
四、MySQL重新安装后数据恢复
步骤前边都写了就不重复了。
1,、把卸载前备份的数据替换掉/var/lib/mysql 文件夹中的数据。
2、按照 步骤‘排查1’中的方式将文件的权限重新设置对。然后重启服务器,就可以用phpmyadmin查看了。