CentOS 6 Web服务器迁移

一台老服务器用了5年了。为了保证稳定性,在它出毛病之前,预先换台新服务器。
本文记录了服务器迁移的全部过程。
本文档参考了本文的大纲:
同时在实践工作中,加入了自己的方法和经验。
全部内容分为以下几部分
  1. 建立用户
  2. 复制网站目录
  3. 修改本地hosts文件,准备测试
  4. 安装所有必要程序
  5. 复制程序配置文件
  6. MySQL数据迁移
  7. MYSQL数据迁移后,原主机上数据有更新怎么办?
  8. MYSQL数据迁移后,如何验证数据相符?
  9. 拷贝常用管理脚本
  10. 拷贝crontab

建立用户
对照老机器上 vi /etc/passwd
在新机器上逐个 useradd
复制网站目录
文件很多,用rsync吧。算法比scp智能。
rsync -PaAz -e 'ssh -p PORTNUMBER' /var/www/html/ root@11.22.33.44:/var/www/html/
如果多次复制,需要删除不用文件,加上 –delete。
修改本地HOSTS文件,准备测试
对照/etc/httpd/conf/httpd.conf中,每个虚拟主机域名,在本机hosts文件中,指向新主机的IP地址。
以便后面连到新主机上逐个测试每个网站。
 
安装所有必要程序
 
安装apache, php, mysql, vsftpd等。详细记录见:http://dingxuan.info/wp/?p=327
有几个程序要注意更新SELINUX设置,例如:setsebool -P allow_ftpd_full_access 1
复制配置文件
以apache配置文件为例:
scp -r -P 12345 /etc/httpd/conf root@11.22.33.44:/etc/httpd/
复制过去之后,记得把尚未安装的模块,先从配置文件中注释掉。
MYSQL数据迁移
 
迁移方法有很多种选择
  1. 保证两台机器mysql版本一样。停服务后直接copy数据文件。
    速度快,但感觉有风险。
  2. mysqldump:
  3. MySQL Workbench
    workbench有migration工具,但我的2G数据数导入导出很慢。最后还报出一堆错误。
  4. 试验多次,发现innobackupex 是最好用的。
命令格式:
innobackupex --host=localhost --user=root --password=passwd /root/mysqlbackup/
innobackupex --host=localhost --user=root --password=123456  --defaults-file=/etc/my.cnf /root/mybackup/xtrabackup/
示例:
[root@mysql data]# service mysqld stop
[root@mysql data]# rm -rf /mydata/data/*
[root@mysql data]# innobackupex --apply-log /root/mybackup/xtrabackup/2013-07-23_05-48-03/
#--apply-log 的意义在于把备份时没commit的事务撤销,已经commit的但还在事务日志中的应用到数据库
[root@mysql data]# innobackupex --copy-back /root/mybackup/xtrabackup/2013-07-23_05-48-03/
#--copy-back数据库恢复,后面跟上备份目录的位置
[root@mysql data]# chown -R mysql:mysql /mydata/data
[root@mysql data]# service mysqld start #如果能启动代表恢复正常
[root@A1-2013 lib]# service mysqld start
 MySQL Daemon failed to start.
 Starting mysqld:                                           [FAILED]
数据库没启来,查日志:
[root@A1-2013 lib]# vi /var/log/mysqld.log
131228 11:18:55 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
 ^G/usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
 131228 11:18:55 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
 131228 11:18:55  InnoDB: Initializing buffer pool, size = 8.0M
 131228 11:18:55  InnoDB: Completed initialization of buffer pool
 131228 11:18:55  InnoDB: Operating system error number 13 in a file operation.
 InnoDB: The error means mysqld does not have the access rights to
 InnoDB: the directory.
 InnoDB: File name ./ibdata1
 InnoDB: File operation call: 'open'.
 InnoDB: Cannot continue operation.
 131228 11:18:55 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
SELINUX的问题:
在原来主机上查看:
[root@mysql data]# ll -Z /var/lib/mysql

 -rw-r-----  mysql mysql system_u:object_r:mysqld_db_t    ibdata1
 -rw-r-----  mysql mysql system_u:object_r:mysqld_db_t    ib_logfile0
 -rw-r-----  mysql mysql system_u:object_r:mysqld_db_t    ib_logfile1
在新主机上查看:
[root@mysql data]# ll -Z /var/lib/mysql</div>
<div>-rw-rw----. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 ibdata1
 -rw-rw----. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 ib_logfile0
 -rw-rw----. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 ib_logfile1

 chcon -v --type=mysqld_db_t /var/lib/mysql
 chcon -v --type=mysqld_db_t /var/lib/mysql/*
 chcon -v --type=mysqld_db_t /var/lib/mysql/mysql
 chcon -v --type=mysqld_db_t /var/lib/mysql/mysql/*
 And so forth for any directories that you have under /var/lib/mysql
 [root@mysql data]# chcon -R -u system_u -r object_r -t mysqld_db_t /var/lib/mysql/
 [root@mysql data]#semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"
 [root@mysql data]#restorecon -Rv /var/lib/mysql
MYSQL数据迁移后,原主机上数据有更新怎么办?
 
设置主从自动复制Replication。最简单的办法,跟着phpMyAdmin里的复制说明配置。
更详细的说明:
MYSQL数据迁移后,如果验证数据相符?
 
有mysqldiff等几种工具,最后选择workbench utilities中的mysqldbcompare
mysqldbcompare --server1=root:passwd@1.1.1.1  --server2=root:passwd<a href="mailto:@2.2.2.2">@2.2.2.2</a> DevNewAge:DevNewAge --run-all-tests --changes-for=server2 --difftype=sql
提示中出现错误。
mysqldbcompare  ERROR: Query failed. 23 (HY000): Out of resources when opening file
 <a href="http://forums.cpanel.net/f354/upgrade-mysql-5-5-sqlstate-hy000-general-error-23-out-resources-286172.html">http://forums.cpanel.net/f354/upgrade-mysql-5-5-sqlstate-hy000-general-error-23-out-resources-286172.html
拷贝常用管理脚本
rsync -PaAz -e 'ssh -p 123456' /root/scripts root@11.22.33.44:/root/
拷贝crontab
假设你和我一样,只在一个用户里设了crontab,分别在新旧两台机器上:
crontab -e
拷贝内容。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload CAPTCHA.