阿里云mysql启动卡死解决方案与重装后数据恢复

由于重启服务器导致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查看了。

你可能感兴趣的:(阿里云mysql启动卡死解决方案与重装后数据恢复)