最近總當機,IT幫網站用了1天時間成功搬家

最近一兩週,IT幫的會員、BA學員和AM學員時不時反饋網站打不開、敏捷我的APP登陸不了,有時候又能夠可是很慢,還有的時候電信能訪問而聯通網絡訪問不了。php

這個體驗可很差,因而前天想把站點和APP後臺都挪一下窩,因而在騰訊買了個雲主機,開始網站搬遷。html

在過程當中學習,如下是此次搬遷中的技術問題和解決記錄,說不定對一些人有幫助,也能夠給本身作個備份,以便以後再次搬遷時查看。mysql

購買雲主機,安裝系統

在騰訊雲選了配置,付錢就OK了。由於我沒學過Linux啊,之前都是在window上幹活,工做中服務器端我也不須要本身去作,我提出需求便可。因此雲主機購買時我選擇的是window系統,由於總以爲這樣搬移個人工做量就能夠少。linux

不過我不喜歡重複,因此想換成CentOS系統。從window切換到centos系統會更改系統盤大小之類的,要下工單由後臺從新分配主機。沒過多久給我從新分配安裝了CentOS 6。經過騰訊雲控制檯登陸,感受網頁操做有點慢,因而想着遠程命令行操做。個人是Mac機,因而百度了「Mac CentOS 遠程操做」,知道經過終端SSH就能訪問,因而經過SSH進行了遠程操做。nginx

由於沒學過linux,不熟悉命令行啊,因而想弄個圖形桌面是否是更容易上手呢。因而網上查了一些如何安裝圖形界面。操做了幾回,死機幾回,重裝了幾回。後來想幹脆從CentOS6重裝到CentOS7.2,雖然網上有人說CentOS7可能會對熟悉的人有些不方便。不過我反正都不會,因而選擇裝最新版,因此本身從新安裝了CentOS7系統。web

從CentOS6切換到7很快,一會兒就行了。我接着經過Mac終端ssh命令訪問重裝後的CentOS7,不過提示錯了:
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
Host key verification failed.
 
這個問題的解決方法以下:
finder->前往—>前往文件夾,輸入 /Users/sw/.ssh/known_hosts,將文件中與ip地址相關的信息所有刪除,保存便可。
還能夠這樣搞定: ssh-keygen -R  [IP_ADDRESS]

這個問題搞定以後,經過SSH操做。由於我對linux的生疏,仍是不習慣命令行,因此仍是想要一個圖形界面來遠程操做,因而網上找如何安裝系統桌面,又查找VNC怎麼安裝。按照不一樣文章所示進行操做,死機了幾回,重裝了幾回。最後終於安裝好了,不過最後發現基本也沒有用到,由於我以爲得練習一下命令行操做,並且大部分教程也都是命令行的。sql

安裝PHP環境數據庫

由於IT幫網站、敏捷我的APP後臺都是基於PHP開發的,因此在搞定系統以後就開始時安裝環境了。固然爲了簡單性,你也能夠直接從服務市場得到作好的PHP環境鏡像。不過我第一次弄這個,仍是留給我本身吧。apache

上網搜索「CentoOS7 PHP環境」,出來不少相關文章,這個過程仍是又折騰了一些時間。如下是正確操做的這一次的步驟:vim

卸載mariadb

CentOS7默認不用MySQL,而是mariadb了,雖然說mariadb能夠向後兼容MySQL,不過我仍是想用MySQL,因此我先要卸載mariadb。

先列出全部被安裝的rpm package

# rpm -qa | grep mariadb
mariadb-libs-5.5.50-1.el7_2.x86_64 mariadb-5.5.50-1.el7_2.x86_64 mariadb-server-5.5.50-1.el7_2.x86_64

不一樣版本返回結果可能不同,按照返回版本號卸載上面返回的內容

# rpm -e mariadb-libs-5.5.50-1.el7_2.x86_64

 

安裝MySQL

CentOS 7的yum源中貌似沒有正常安裝mysql時的mysql-sever文件,須要去官網上下載

 
# wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
# yum install -y mysql-community-server

成功安裝以後重啓mysql服務

 
# service mysqld restart

 

爲了增強安全性,MySQL5.7爲root用戶隨機生成了一個密碼,在error log中,關於error log的位置,若是安裝的是RPM包,則默認是/var/log/mysqld.log。
只有啓動過一次mysql才能夠查看臨時密碼

grep 'temporary password' /var/log/mysqld.log(若是以前安裝過MySQL則這裏可能會有多個密碼,用最後一個,注意這個密碼輸入時是能夠粘貼的)
 
 

這裏的密碼是YdsGaxOq>2n!

登錄並修改密碼

使用默認的密碼登錄

mysql -uroot -p(這是一個MySQL的以密碼登陸root用戶的命令)

能夠經過如下命令去設置密碼:

 
# mysql -uroot
mysql> set password for 'root'@'localhost' = password('mypasswd');
mysql> exit

如何在CentOS中添加Swap

MySQL啓動如下後發現自動關閉,查找日誌發現:cannot allocate the memory for the buffer pool。經過 free -ml 看到swap是0,因而要添加swap文件。

一、使用dd命令建立一個swap交換文件

dd if=/dev/zero of=/home/swap bs=1024 count=1024000

這樣就創建一個/home/swap的分區文件,大小爲1G。

二、製做爲swap格式文件:

mkswap /home/swap

三、再用swapon命令把這個文件分區掛載swap分區

/sbin/swapon /home/swap

咱們用free -m命令看一下,發現已經有交換分區了。

可是重啓系統後,swap分區又變成0了。

四、爲防止重啓後swap分區變成0,要修改/etc/fstab文件

vi /etc/fstab

在文件末尾(最後一行)加上

/home/swap swap swap default 0 0

這樣就算重啓系統,swap分區仍是有值。

刪除swap交換文件

一、先中止swap分區

/sbin/swapoff /home/swap

二、刪除swap分區文件

rm -rf /home/swap

三、刪除自動掛載配置命令

vi /etc/fstab

這行刪除

/home/swap swap swap default 0 0

這樣就能把手動增長的交換文件刪除了。
注意:
一、增長刪除swap的操做只能使用root用戶來操做。
二、裝系統時分配的swap分區貌似刪除不了。
三、swap分區通常爲內存的2倍,但最大不超過2G

安裝Apache

yum install httpd #根據提示,輸入Y安裝便可成功安裝

  • systemctl start httpd.service #啓動apache
  • systemctl stop httpd.service #中止apache
  • systemctl restart httpd.service #重啓apache
  • systemctl enable httpd.service #設置apache開機啓動

在客戶端瀏覽器中打開服務器IP地址,會出現下面的界面,說明apache安裝成功

安裝PHP

#Centos 5.X:

rpm -Uvh http://mirror.webtatic.com/yum/el5/latest.rpm

#CentOs 6.x:

rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm

#CentOs 7.X:

rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

4.安裝新的版本

yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-fpm php71w-gd php71w-mbstring php71w-mysqlnd php71w-opcache php71w-pdo php71w-xml php71w-ldap php71w-mcrypt

根據提示輸入Y直到安裝完成。

apache默認的程序目錄是/var/www/html

複製網站文件

環境搭建好了,就要拷貝文件了。此次要從原有網站把完整目錄拷貝到雲主機,不過我怎麼拷貝呢。想到最簡單的辦法就是經過FTP上傳文件了。因而百度如何開啓FTP服務。

yum install -y vsftpd

 

vsftpd默認設置爲禁止root帳戶登陸,開啓的方式以下:

    1.編輯/etc/vsftpd/user_list和/etc/vsftpd/ftpusers兩個設置文件腳本,將root帳戶前加上#號變爲註釋。(即讓root帳戶從禁止登陸的用戶列表中排除)

    2.從新開啓vsftpd   service vsftpd reload

 容許root帳戶訪問ftp,能夠遠程訪問centos系統中的任一文件,對於遠程維護centos系統或下載文件十分方便。但從安全角度考慮,最好爲臨時性開啓,日常仍是把它關掉吧。

FTP配置文件地址:/etc/vsftpd/vsftpd.conf

 

Mac下以前我用的是ForkLift訪問FTP,此次我用它訪問原有和如今的主機,並開始拖動上傳文件。一切正常,可是訪問網站發現網頁不顯示圖片,原來是圖片是中文名,而ForkLift對中文名顯示亂碼。

因而開始找有沒有其餘FTP工具,找了一個Transmit,發現仍是亂碼,又搜索如何解決亂碼問題,發如今Transmit中的View菜單選擇文本編碼爲GB 2312,接着拷貝正常,網頁顯示正常。

  • 啓動Vsftpd服務:service vsftpd start  
  • 設置vsftpd開機啓動, systemctl enable vsftpd
  • 從新啓動Vsftpd服務的命令爲:service vsftpd restart  

備份恢復數據庫

文件拷貝完了,就這就是恢復數據庫了。本來想着把備份好的SQL文件上傳到服務器,而後再去執行。想着如今對安全性也要求不高,簡單一些,使用Navicat遠程訪問服務器執行SQL文件進行數據庫恢復。

這步一切正常。

受權遠程訪問:

登錄:
 
使用mysql數據庫(真正的數據庫,而非數據庫軟件),將全部數據庫的全部表(*.*)的全部權限(all privileges),授予經過任何ip(%)訪問的root用戶,密碼爲123456,最後刷新(flush privileges)便可。
 

開放防火牆端口:

經過vim修改/etc/sysconfig/iptables,添加一行(這裏是爲了簡單添加一行,更多防火牆知識請自行學習):
 
 

重啓防火牆:

 

SSH登陸

 

重裝系統後,再次用SSH登陸出錯。

 

The fingerprint for the RSA key sent by the remote host is

SHA256:ATOehkETYPhbLwhr3cjPKKAOS2Gzjyjr0Tnj8bjRKVs.

Please contact your system administrator.

Add correct host key in /Users/zhoujingen/.ssh/known_hosts to get rid of this message.

Offending ECDSA key in /Users/zhoujingen/.ssh/known_hosts:1

RSA host key for 118.89.233.120 has changed and you have requested strict checking.

Host key verification failed.

 

解決辦法:ssh-keygen -R "你的遠程服務器ip地址" 

 

讓wordpress正常

文件和數據庫好了並不就意味着結束了,後面還有不少問題須要解決。例如這個:

Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50550 Library:50635 in /var/www/html/blog/wp-includes/wp-db.php on line 1142

解決辦法是:

  1. yum remove php-mysql
  2. yum install php-mysqlnd

Fatal error: Call to undefined function mb_convert_encoding() in /var/www/html/blog/wp-includes/class-wp.php on line 146

解決辦法是:

  1. 首先安裝 php-mbstring庫文件:yum install php-mbstring
  2. 以後,修改/etc/php.ini文件,在裏面加一句: extension=mbstring.so

由於這時候域名尚未從新解析,因此wordpress在切換域名時文章連接會連接到之前的域名,而不是如今的IP,因此又遇到如何更改網站域名的問題。後來找到了幾個辦法,採用了在wp_option表去更改網站地址。中間好像還遇到了一些問題,沒有一一記錄,如今也懶得去回憶了。

讓codeigniter正常

敏捷我的APP是使用codeigniter框架開發的,本覺得這個比較簡單,拷貝文件便可。可是由於window和Linux操做系統的差異,之前的代碼運行不了,而我又沒安裝調試環境,因此遇到問題也不知道什麼緣由。

因而用了各類辦法,打開codeigniter的DB Debug模式,而後嘗試簡單更改源碼再運行的方式去發現問題,終於最後都解決了。

其中有這麼幾個問題:

require_once找不到文件,這個主要是我在window下使用的是 require_once( ‘..\application\libraries\class-phpass.php’); 正常,可是Linux文件系統和window不同,這樣的代碼在CentOS則是錯誤的,

解決辦法是:

  • centos下須要 require_once(dirname(__FILE__).’/’.」../libraries/class-phpass.php」);

還有一個問題是 Unable to locate the model you have specified:*_model 的問題,這仍是windows和linux對文件名的處理不一致致使,windows下文件名是不區分大小寫的,可是Linux是嚴格區分大小寫的。

解決辦法是:

  1. 修改全部的model,文件名所有小寫
  2. class model_name , model_name 只有第一個字母是大寫,其他一概小寫

域名從新綁定

搬家後本身再簡單測試了一下,發現OK了,因而開始域名綁定。域名綁定網上找了找,相對簡單,我到域名解析的管理頁面,綁定了www.zhoujingen.cn和zhoujingen.cn到雲主機的IP地址,等待一個小時左右就從新綁定成功了。

折騰1天終於搞定了新主機

雖然問題一個接一個,不過有網絡,這些也不是什麼大問題,終於在1天后主機搞定了。IT幫網站、敏捷我的網站、敏捷我的APP均已成功搬家,你們仍舊按之前方式訪問,全部改變都只是在後臺而已。

以此記錄一下這個過程,以便後期再次搬家時參考,也對那些PHP環境從window搬遷到Linux的人有幫助。

相關文章
相關標籤/搜索