最近在自己的云服务器上配置分布式服务,不小心误删除了文件。删除文件不要紧,关键是删除的是 /usr/local 目录,数据库、nginx、tomcat、dubbo、redis、zookeeper 全都在上面;这么一来以前部署的应用如极客之家、微营销、忆邮手机官网都挂掉了。
应用程序挂掉不要紧,重要的是数据库没了并且最近一年的数据没有备份。郁闷之极也只能慢慢恢复。因不擅长运维,恢复的过程也异常曲折。网上找了半天资料,装了各种软件尝试恢复误删文件,效果是有,文件恢复了部份,但大都不是想要的。事已至此,决定将整个云系统和软件重装一遍:进入阿里云控制台,重新初始化系统。记得初始化系统时,运行中的服务器一定要先停掉,要不你是找不到系统初始化入口的。
一、MySQL 二进制安装
接着首先安装 mysql 数据库。安装方法有很多,这里采用二进制文件离线安装。
1. 卸载系统自带的 MariaDB(CentOS 自带,与 mysql 是分支兄弟关系):
[root@CentOS ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.60-1.el7.x86_64
[root@CentOS ~]# rpm -e --nodeps mariadb-libs-5.5.60-1.el7.x86_64
2. 创建 mysql 用户组和 mysql 用户:
[root@CentOS local]# useradd mysql
3. 解压安装包,并将解压好的文件夹重命名为 mysql:
[root@CentOS my_soft]# tar -zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
[root@CentOS my_soft]# mv mysql-5.7.21-linux-glibc2.12-x86_64 /usr/local/mysql
4. 将 mysql 添加为系统服务:
[root@CentOS local]# cp mysql/support-files/mysql.server /etc/init.d/mysql
[root@CentOS local]# chkconfig --add mysql
5. 初始化数据库。若执行 ./bin/mysqld --initialize 报 libaio.so.1: cannot open shared object file,原因是没有安装 libaio:Ubuntu 用 apt-get install libaio1 libaio-dev,Redhat/Fedora/CentOS 用 yum install libaio。
[root@CentOS mysql]# mkdir data
[root@CentOS mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
6–9. 启动服务、用临时密码登录、修改密码、设开机启动,并开放远程访问:
[root@CentOS mysql]# systemctl start mysql
[root@CentOS mysql]# ./bin/mysql -uroot -p
Enter password: # 这里输入刚获取的临时密码
mysql> set password = password('你的密码');
[root@CentOS mysql]# chkconfig mysql on
mysql> grant all privileges on *.* to 'live'@'%' identified by '123456';
mysql> flush privileges;
二、Nginx 源码安装
安装 nginx 需要先将官网下载的源码进行编译,依赖 gcc、PCRE(http 模块解析正则)、zlib(gzip)、OpenSSL(https)。官网下载地址:https://nginx.org/en/download.html ,这里用的是当时的稳定版 1.10.1。
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1
./configure
make install
whereis nginx
启动、停止与开机自启动:
cd /usr/local/nginx/sbin/
./nginx
./nginx -s stop
./nginx -s quit
./nginx -s reload
# quit:待 nginx 进程处理任务完毕再停止
# stop:相当于查出进程 id 再 kill 强制杀掉
ps aux|grep nginx
vi /etc/rc.local
# 增加一行 /usr/local/nginx/sbin/nginx
chmod 755 /etc/rc.local
三、PHP、php-fpm 与 Nginx 联调
yum install php php-fpm
systemctl start php-fpm
yum install php-gd php-mysql php-mbstring php-xml php-mcrypt php-imap php-odbc php-pear php-xmlrpc
最开始执行上述代码 mysql 模块没有成功,又执行了 yum install mariadb mariadb-server,结果以前装的 mysql 失效;卸载后 mysql 恢复正常,mysql 模块也 OK:
[root@node1 ~]# rpm -qa|grep mariadb
mariadb-5.5.56-2.el7.x86_64
mariadb-libs-5.5.56-2.el7.x86_64
mariadb-server-5.5.56-2.el7.x86_64
[root@node1 ~]# yum remove mariadb
[root@node1 ~]# rm -rf /etc/my.cnf
[root@node1 ~]# rm -rf /var/lib/mysql/
配置 nginx 与 php 一起工作,打开 nginx 安装目录下 conf/nginx.conf,在 http 模块中添加:
location / {
index index.html index.htm index.php;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
测试 nginx 与 php 是否正常,编辑 /usr/local/nginx/html/info.php:
<?php
phpinfo();
?>
| 组件 |
做法 |
踩过的坑 |
| 云主机 |
阿里云控制台初始化系统 |
必须先停机,否则找不到初始化入口 |
| MySQL 5.7 |
二进制放到 /usr/local/mysql |
缺 libaio;再装 MariaDB 会把刚装的 mysql 搞失效 |
| Nginx 1.10.1 |
源码 ./configure && make install |
先装 gcc / pcre / zlib / openssl |
| PHP-FPM |
fastcgi_pass 127.0.0.1:9000 |
用 info.php 的 phpinfo() 验收 |
一句话总结:误删 /usr/local 等于把库和应用一锅端;恢复不成就停机重装,MySQL 走二进制、Nginx 走源码、PHP-FPM 走 9000 端口,并且千万别再装一层 MariaDB 把刚装好的库冲掉。