阿里云备份快照后MySQL无法启动的解决方案
/etc/init.d/mysqld start
Starting MySQL./usr/local/mysql/bin/mysqld_safe: line 586: /var/lib/mysql/mysqld_safe.pid: No such file or directory
awk: (FILENAME=- FNR=1) warning: error writing standard output (Broken pipe)
2019-01-27T04:16:23.831557Z mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'.
The server quit without updating PID file (/var/lib/mysql/i[FAILED]zg7ppyt15vrbkz.pid).
复制代码
阿里云服务器,备份了快照,备份时网站可以用,然后回到这个快照,启动MySQL,报上述错误,网上查到很多资料都没有解决。最后阿里云的工程师解释说我备份录音的时候出现了问题。系统表有问题。 mysql.user 表不存在,因此数据库未初始化。
2019-01-27T10:17:34.838342Z 0 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
2019-01-27T10:17:34.838856Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-01-27T10:17:34.838945Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
2019-01-27T10:17:34.838956Z 0 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
2019-01-27T10:17:34.838984Z 0 [Note] - '0.0.0.0' resolves to '0.0.0.0';
2019-01-27T10:17:34.839021Z 0 [Note] Server socket created on IP: '0.0.0.0'.
2019-01-27T10:17:34.839302Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2019-01-27T10:17:34.839476Z 0 [Note] InnoDB: Buffer pool(s) load completed at 190127 18:17:34
2019-01-27T10:17:34.841275Z 0 [Warning] Failed to open optimizer cost constant tables
2019-01-27T10:17:34.843929Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
2019-01-27T10:17:34.843989Z 0 [ERROR] Aborting
复制代码
解决方案:强制重装MySQL。重新安装之前不要忘记备份数据。
编译安装MySQL
- 依次执行以下命令,验证系统上是否存在通过rpm安装的MySQL或MariaDB。
rpm -qa | grep mysql rpm -qa | grep mariadb 复制代码
如果已安装,请运行以下任意命令将其删除。
rpm -e 软件名 #注意:这里的软件名必须包含软件的版本信息,如rpm -e mariadb-libs-5.5.52-1.el7.x86_64。一般使用此命令即可卸载成功。 rpm -e --nodeps 软件名 #卸载不成功时使用此命令强制卸载 复制代码
删除后,使用
rpm -qa|grep mariadb
或rpm -qa|grep mysql
查看结果。 - 运行以下命令安装MySQL。如果已经安装了,直接覆盖,回车即可。
yum install -y libaio-* #安装依赖 mkdir -p /usr/local/mysql cd /usr/local/src wget http://zy-res.oss-cn-hangzhou.aliyuncs.com/mysql/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz tar -xzvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz mv mysql-5.7.17-linux-glibc2.5-x86_64/* /usr/local/mysql/ 复制代码
- 依次执行以下命令创建mysql组和用户,并将mysql用户添加到mysql组中。如果之前添加过,可能已经存在,按回车即可。
groupadd mysql useradd -g mysql -s /sbin/nologin mysql 复制代码
- 执行MySQL数据库初始化命令。
/usr/local/mysql/bin/mysqld --initialize-insecure --datadir=/usr/local/mysql/data/ --user=mysql 复制代码
- 更改MySQL安装目录的属性:
chown -R mysql:mysql /usr/local/mysql
。 - 依次运行以下命令设置自动运行。
cd /usr/local/mysql/support-files/ cp mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld # 添加执行权限 vim /etc/rc.d/rc.local 复制代码
将
/etc/init.d/mysqld start
添加到rc.local文件中。如果已经添加了,直接退出即可。 - 设置环境变量。
- 运行
vi /root/.bash_profile
打开文件,按i
进入编辑模式。 - 将
PATH=$PATH:$HOME/bin:/usr/local/apache/bin
更改为PATH=$PATH:$HOME/bin:/usr/local/apache/bin :/usr/local/mysql/bin:/usr/local/mysql/bin
。如果已经改过,直接关闭即可。 注:根据Apache编译安装环境变量修改。 - 按
Esc
退出编辑模式,输入:wq
保存并关闭文件。 - 运行
source /root/.bash_profile
再次运行该文件。
- 运行
- 启动MySQL数据库。
/etc/init.d/mysqld start 复制代码
出现下图所示的信息,表示MySQL已成功启动。
- 更改MySQL root密码:初始化后,如果密码为空,则可以直接登录MySQL。为了保证安全,必须修改MySQL root用户密码。执行以下命令,根据提示设置密码。
mysqladmin -u root password 复制代码
需要以下信息:
```
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
```
复制代码
- 关闭数据库并执行
service mysqld stop
mysqld_safe --skip-grant-tables &
复制代码
- 以重新尝试登录 MySQL 数据库。
mysql -uroot -p #-p和密码之间无空格 复制代码
- 键入
显示数据库;
查看数据库信息并正常运行\q
退出MySQL。 - 键入
/usr/local/apache/bin/apachectl restart
以重新启动服务器。如果提示httpd 未运行,尝试启动
,请再次输入/usr/local。 /apache/bin/apachectl restart
。如果没有问题的话,基于MySQL的服务就成功了。输入你的服务器IP进行测试。
蔡斯。
链接:https://juejin.im/post/5c4d9b33f265da611d67027b
来源:掘金
版权归作者所有。商业转载请联系作者获得许可。非商业转载请注明来源。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。