• 欢迎访问愉悦人生,我会在这里分享一些我认为有趣的东西,欢迎关注!
  • 永远相信美好的事情即将发生!
  • 好久没更新了,也不知道该更新什么

记·我的站点迁移过程

Linux相关 Nvito 10个月前 (10-06) 718次浏览 0个评论

文章可能已经失去时效性,如有问题可在下方留言与我联系,文章最后更新于

记·我的站点迁移过程

前言

话说之前一直都是在用阿里云+宝塔面板搭建的wordpress博客系统,宝塔面板确实是挺好用的,有付费服务,有免费插件,对于一些没有什么linux基础的人十分友好,只要在全新环境下的linux系统命令行下敲一条命令,回车····OK!搞定,接下来的全是web操作,搭建wordpress就是如此的简单。

阿里云的服务器只要实名而且24岁以下,最低配的云服务器一年也就百来块钱(不是主机哦),搭一个小博客系统还是绰绰有余的,只是上传的带宽确实台着急了只有1M。最近我的阿里云服务器也快要到期了,自己自学了LINUX运维也有一段时间了,想着不依赖宝塔面板自己搭建wordpress,把站点从阿里云迁移出去,现在站点已经迁移完成。

还有一些遗留的小问题,这些问题在迁站之前就已经出现了,因为代码这些东西不太懂,也没有个很好的解决方法,对比了一下迁站之前的错误日志,问题应该出在了主题代码上,博主也是个抠门的人,舍不得花几十块钱进这个主题的群去咨询一下。哈哈哈哈哈哈哈~

迁移纪要

开头那张图就是我迁站的大概思路,但是实际上肯定会有些偏差。切换站点之前不要对源站做任何操作,仅切换域名的解析记录即可,如果迁移站点有问题,以便随时切换回源站点。

我这么做的目的是模拟真实的无缝迁站,以往也没有任何经验,而且我的站点也是比较简单,所以我实际做的事情也是比较简单的。下面记录一下迁站过程:

准备工作

云服务选择

国内的服务器价格较贵,我现有的需求对于1M带宽有些接受不了,于是乎我选择了国外的服务商,虽说配置也是挺低的,但是带宽至少没有限制的那么低。

Vultr,https://www.vultr.com/?ref=6917258,对于我这样抠门的博主来说,选了一个5刀/月的套餐,如果现在有2.5刀的套餐我可能也会选最便宜的,话说这的vps的线路都很差,绕了大半个地球,还没有免费的GCP好用。

CDN选择

因为我的站点访问的基本都是国人,服务器在国外,速度较慢,所以想了想还是用cdn加速,满足一下自己的虚荣心理。

CDN仅作了中国大陆的加速,选七牛的原因没有别的,就是因为之前充了十块钱在里面,想把十块钱花了,如果一个月十块钱以内估计就不换别的CDN了,超过的话会考虑一下腾讯云和阿里云的CDN。

不过七牛的cdn也很不错,速度杠杠的,需要注意的是cdn加速不要用多家厂商,否则访问会有问题,有需要的小伙伴可以点一下下面的邀请连接https://portal.qiniu.com/signup?code=1hmd4h4iwlaoi

环境配置

Nginx禁止ip直接访问

server {
    listen 80 default;
    server_name _;
    return 502;
}

Nginx强制跳转https及www二级域名

if ($server_port !~ 443)
{
    rewrite ^(/.*)$ https://$host$1 permanent;
}

 if ($host != 'www.domain.com')
 {
    rewrite ^(.*)$ https://www.domain.com$1 permanent;
 }

防止跨站

vim .user.ini
open_basedir=/www/vhost/domain.com/:/tmp:/proc/

chattr +i .user.ini

源码备份

站点源码的备份比较简单,直接复制打包压缩就可以了

cp -r /www/vhost/site_name /opt && cd /opt
tar -zcf /opt/site_name.tar.gz /opt/site_name

Mysql主从配置

因为数据库的版本不一样,源站的mysql版本较低,做不了双主库同步,所以做主从备份,源库为主库,新库为从库。

源数据库站点库全备,由于数据量少,所以使用mysqldump做备份

mysqldump -uroot -p"db_password" --databases database | gzip > /opt/db_$(date +%F).sql.gz

在源站的mysql配置文件中开启binlog,宝塔安装的mysql原本就已经开启了binlog,我的新站点在编译安装的时候就已经把binlog写入了mysql的配置文件,下面做一个简单的主从配置

源站点

//修改配置文件
vim /etc/my.cnf
server-id=1
log_bin=mysql-bin
//重启数据库生效
/etc/init.d/mysql restart
//登陆数据库,建立主从备份的用户
mysql> mysql -u db_user -p
mysql> GRANT ALL PRIVILEGES ON *.* TO 'db_username'@'%' IDENTIFIED BY 'db_password';
mysql> flush privileges;
//查看主库状态
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000011 |  2674449 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

新站点

//从库修改配置文件
vim /etc/my.cnf
server-id=2
log_bin=mysql-bin
//重启数据库生效
/etc/init.d/mysql restart
//设置从库连接主库的信息
CHANGE MASTER TO 
        MASTER_HOST='host_IP',
        MASTER_USER='user_name',
        MASTER_PASSWORD='user_passwd',
        master_log_file='mysql-bin.ID',
        master_log_pos=ID;
//启动从库
start slave;
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State:
                  Master_Host: remote_ip
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000011
          Read_Master_Log_Pos: 154
               Relay_Log_File: Website-relay-bin.000002
                Relay_Log_Pos: 150
        Relay_Master_Log_File: mysql-bin.000011
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 308
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1236
                Last_IO_Error: 0
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 10
1 row in set (0.00 sec)

因为博主比较穷,选的vps配置较低,内存较小,Mysql编译的时候提示内存不足,需要增加虚拟内存

c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See http://bugzilla.redhat.com/bugzilla for instructions.
make[2]: * [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] Error 4
make[1]: * [sql/CMakeFiles/sql.dir/all] Error 2
make: * [all] Error 2

创建虚拟内存

dd if=/dev/zero of=/tmp/swap bs=64M count=16
mkswap /tmp/swap
swapon /tmp/swap
swapon -s
free -h

测试站点

做测试站点一定要在数据库里面把域名改了,否则登陆不了后台,我们查询以下两条数据可以看到域名,使用update语句更新掉即可,注意使用的是http还是https

mysql> select option_name,option_value from wp_options where option_name='siteurl' or option_name='home';
+-------------+-----------------------------+
| option_name | option_value                |
+-------------+-----------------------------+
| home        | http://domain.com           |
| siteurl     | http://domain.com             |
+-------------+-----------------------------+
2 rows in set (0.00 sec)

源码部署、数据库导入

gunzip -f < /opt/db_2019-09-20.sql.gz |  mysql -uroot -p"db_password" db_name

日志分割

日志分割用了系统自带Logrotate

/www//log/domain。com.log
{
    daily
    rotate 7
    missingok
    dateext
    notifempty
    sharedscripts
    postrotate
        if [ -f /usr/local/nginx/logs/nginx.pid ]; then
            kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
        fi
    endscript
}

定时备份到本地脚本脚本

#!/bin/bash
#站点路径、备份文件存放路径
SITE_DIR=/www/vhost/site_name
SITE_BAK_DIR=/www/backup/site_name
DB_BAK_DIR=/www/backup/db_name
#站点名,数据库名
SITE_NAME=site_name
DB_NAME=db_name
DATE_NAME=$(date +%Y%m%d-%H%M%S)
#备份站点根目录
cp -ar $SITE_DIR /opt/$SITE_NAME-$DATE_NAME && cd /opt && tar -zcf $SITE_NAME-$DATE_NAME.tar.gz $SITE_NAME-$DATE_NAME --remove-files && mv $SITE_NAME-$DATE_NAME.tar.gz $SITE_BAK_DIR
#删除14天以前的备份文件
find $SITE_BAK_DIR -name "*.tar.gz" -mtime +14 -exec rm -f {} \;
#备份数据库
mysqldump -u"$DB_NAME" -p"db_password" --databases "$DB_NAME" | gzip > /opt/db/$DB_NAME-$DATE_NAME.sql.gz && mv /opt/db/$DB_NAME-$DATE_NAME.sql.gz $DB_BAK_DIR
#删除14天以前的备份文件
find $DB_BAK_DIR -name "*.sql.gz" -mtime +14 -exec rm -f {} \;

定时备份到腾讯云COS存储

腾讯云COS存储有一定的免费额度,七牛云也有,只是最近在琢磨腾讯云的产品,所以看了一下文档,用腾讯云的python sdk写了一个脚本自动上传最新的三份备份文件到云上。迟点有时间重新整理一下代码再贴上来,代码比较粗糙。

腾讯云对象存储COS简单上传python脚本

文章可能已经失去时效性,如有问题可在下方留言与我联系,文章最后更新于 2020年1月18日 前言 最近在捣鼓腾 […]


愉悦人生 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:记·我的站点迁移过程
喜欢 (5)
发表我的评论
取消评论

表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址