2014年11月27日 星期四

MySQL 的備份與還原

1.
透過指令一次備份所有資料庫:
mysqldump -u bkupuser -p密碼 --all-database --events --ignore-table=mysql.event > dbbackup.sql
(--all-databases 也可用 -A 替代)
附註:還原所有資料庫方式:
mysql -u root -p < dbbackup.sql

若是要備份、還原單一資料庫:
備份questionpaper :
mysqldump -u bkupuser -p questionpaper > questionpaper.sql

還原questionpaper :
mysql -u bkupuser -p questionpaper < questionpaper .sql

注意bkupuser的權限要調整:


































因為是備份用的,新、刪、改的權限可以關掉

2.
備份之後可以加密壓縮

#壓縮打包並加密
#tar -cpz 原檔案 | openssl enc -e -aes256 -k 密碼 -out 新檔案
tar -cpz dbbackup.sql | openssl enc -e -aes256 -k abcde1234 -out dbbackup.sql.tar.gz

解密格式:
 openssl enc -d -aes256 -k 密碼 -in 原檔案 -out 新檔案
如剛剛加密壓縮的dbbackup.sql.tar.gz要解回來的話:
 openssl enc -d -aes256 -k 密碼 -in dbbackup.sql.tar.gz -out dbbackup.sql.tar.gz
接著在tar -zxvf dbbackup.sql.tar.gz 解開資料

參數說明:
-d : 解密
-aes256:因為當初是用aes256加密的
-k 密碼: 當初加密的密碼
-in:輸入要解密的檔案
-out:輸出解密的檔案

3.
異地備援:
通常我們會寫一個script來自動把備份出來的檔案丟到另一部server,
通常是透過scp的指令
如何做到不需要輸入密碼自動上傳備份檔
透過ssh-keygen來達成

ssh-keygen -t rsa 或 ssh-keygen -d (dsa) => 產生出 id_rsa, id_rsa.pub
將產生的id_rsa.pub傳到要登入的遠端主機
登入到遠端主機後,將剛剛上傳的id_rsa.pub 內容加到.ssh/authorized_keys中
cat id_rsa.pub >> .ssh/authorized_keys 即可
這樣子就可以 key 認證登入, 不需輸入密碼.

4.可以撰寫Script來達成異地備援

cd /home/dbackup
SQL_File=/home/dbackup/mysql`date +%Y%m%d%H%M`.sql
mysqldump -u 資料庫帳號 -p密碼 要備份的資料庫 --single-transaction > $SQL_File
#透過scp丟到備援主機
scp -pq -P ssh_port $SQL_File dbackup@備援主機IP:丟到哪一個目錄
rm -f $SQL_File #傳送後清掉本機的備份資料









2014年11月25日 星期二

安裝 Laravel On Centos 6.5

最近因為專案要用到laravel這個Framework,所以就去學習了一下如何安裝

1.
laravel 4.2需要PHP版本為5.4以上,一般來說CentOS6.5 PHP 版本是PHP 5.3.3,用一般的yum安裝或是update也上不去,所以要先解決這個問題
可參考以下的做法
-------------------------------------------------------------------------------
CentOS 6 系統 PHP 預設只能更新到 5.3.3,可另外新增 remi repository 安裝較新的 PHP
安裝 remi repository
rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
說明:
http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm => 64 bit
http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm => 32 bit
安裝 apache、mysql、php
yum --enablerepo=remi install httpd
yum --enablerepo=remi install mysql-server
yum --enablerepo=remi install php
yum --enablerepo=remi install php-mysql

其他,安裝 php-mbstring
yum --enablerepo=remi install php-mbstring
若不想每次都輸入 --enablerepo=remi,可修改 /etc/yum.repos.d/remi.repo,將 remi 開啟
vi /etc/yum.repos.d/remi.repo
將 enabled=0 改為 enabled=1
---------------------------------------------------------------------------------------
順利update到5.4後,因為laravel會用到mcrypt,所以記得還要裝一下php-mcrypt
yum install php-mcrypt

2.
安裝composer,可以參考composer網站的安裝方式(https://getcomposer.org/doc/00-intro.md)
curl -sS https://getcomposer.org/installer | php
curl 是類似wget抓取檔案的指令,-s:silence安靜模式, -S:show-error
執行之後你會發現多了一個composer.phar







你可以將這個composer.phar加到你的環境變數去,以利於執行
可以透過以下指令去看PATH所在
echo $PATH






我是直接將他移到 /usr/local/bin/底下,並改名叫做composer
 mv composer.phar /usr/local/bin/composer



這樣就比較方便來執行composer
你可以直接下composer來看看有沒有成功



3.
透過composer來安裝laravel,

       (Composer你可以看作是一個套件管理器,類似 PEAR 的作用)          

可以參考lavarel網站的做法(http://laravel.com/docs/4.1/installation#install-laravel)
方式如下:
composer create-project laravel/laravel 你的專案名稱 --prefer-dist
記得中間要加入你的專案名稱







我先切到apache的資料夾裡面,然後直接用composer的指令建立一個blog的專案
這步驟會非常久,我第一次執行時以為是當掉了!!其實是時間花比較長而已..























等到執行完畢後,你會發現多了一些資料夾























4.
修改apache根目錄,指到專案資料夾的public
vi /etc/httpd/conf/httpd.conf
找到 DocumentRoot 修改指到專案資料夾的public







5.
安裝完 Laravel 後直接用Web開啟可能會出現Error in exception handler.的訊息
必須修正 app/storage 的權限


chmod -R 777 app/storage



修改public/.htaccess

# 將^ 改成 ^(.+)$

# RewriteRule ^ index.php [L]


改為 RewriteRule ^(.+)$ /index.php [L]



6. laravel的控制器 artisan ,
你可以在每個專案資料夾中看到 artisan ,


透過 php artisan up 可以將專案發布,同樣的 php artisan  down 就是把專案下架

安裝完畢後開啟瀏覽器,應該可以看到以下畫面


CentOS6 安裝 PHP 5.4

資料來源:http://xyz.cinc.biz/2014/04/centos6-php-54.html


CentOS 6 系統 PHP 預設只能更新到 5.3.3,可另外新增 remi repository 安裝較新的 PHP
安裝 remi repository
rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
說明:
http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm => 64 bit
http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm => 32 bit
安裝 apache、mysql、php
yum --enablerepo=remi install httpd
yum --enablerepo=remi install mysql-server
yum --enablerepo=remi install php
yum --enablerepo=remi install php-mysql

其他,安裝 php-mbstring
yum --enablerepo=remi install php-mbstring
若不想每次都輸入 --enablerepo=remi,可修改 /etc/yum.repos.d/remi.repo,將 remi 開啟
vi /etc/yum.repos.d/remi.repo
將 enabled=0 改為 enabled=1



2014年11月23日 星期日

MySQL 限定帳號能夠處理的資料庫

今天剛好有遇到一個需求,需限制一個登入MySQL的帳號只允許他針對某個資料庫去異動,

首先必須先在 資料庫: mysql 中的 資料表: user,新增此使用者的登入帳號與密碼。





然後將該USER帳號的所有權限設定為N
























接著在 資料庫: mysql 中的資料表: db ,設定該帳號的資料







如此一來該帳號就只能依據db給的權限限定可以處理的資料庫。

今天這樣實驗後,我歸納MySQL的權限設定,user-->db-->tables_priv 一層一層賦予權限
1.
首先會由user表去調出帳號密碼,如果符合再去調是否有足夠的權限(這邊的權限是全域的,假設說設定允許SELECT,即便你在mysql 中的資料表: db,設定只允許處理某個資料庫,該帳號還是可以看到其他的資料庫內容)
2.
如果user表內無其他權限,再到db去調相關資料(如上面的例子)

3.如果db內無相關權限,再到 mysql 中的 資料表: tables_priv去調權限(限定該帳號只能針對那些TABLE去做處理)