MySQL 服務器主從同步架構安裝配置學習記錄

論壇的mysql數據庫備份一直以來採取冷備模式,每天一次,網站必須中斷訪問一段時間,前期還好,數據庫小,分把鍾就解決問題,隨着數據庫越來越大,每次備份所需的時間也越來越長,這種方式顯然已不合適了。

網上搜索解決方案,下面這種方案感覺應該可以滿足論壇現階段的要求。

ESXI5.0 上創建兩臺虛擬機作爲mysql服務器,一主一從,主服務器提供論壇msyql訪問,從服務器用來定時備份,備份時並不影響網站正常訪問,並將數據打包上傳到Windows 2000的FTP服務器,Windows 服務器再同步到盛大網盤,同時達到異地和網絡備份的目的,保障數據安全。

 

下面是通過學習整理的相關操作步驟:

 

一、創建兩臺虛擬機

 

創建兩塊虛擬磁盤,一塊10GB,一塊50GB。10GB磁盤安裝系統,打算配置優化完成之後採用ESXI 磁盤的非持久模式,這樣一旦系統出問題,關機即可還原系統。50GB磁盤使用持久模式,用來存放mysql數據

兩臺服務器IP分別是

 

10.0.0.81

10.0.0.82

 

二、安裝centos6.0並作簡要初始配置

 

 

圖文界面安裝,按提示一步步來就可以了,只有以下幾點注意事項:

1.檢測光盤文件的時候選擇skip跳過;

2.系統安裝在10G磁盤上;

3.安裝選擇迷你版系統,嘗試學習命令行模式的服務器操作;

4.網絡配置、時區配置。

 

 

分區並格式化50G硬盤,然後掛載硬盤

 

fdisk -l

顯示/dev/sdb 未分區

分區

fdisk /dev/sdb

輸入m回車啓動分區菜單

輸入n回車創建一個新分區

輸入p回車回車新建主分區

輸入1回車

然後連續兩次回車選擇默認,將磁盤所有空間都分配給這個分區

輸入P回車查看分區是否成功

輸入W保存分區

格式化分區

mkfs -t ext4 /dev/sdb1

創建掛載目錄並掛載硬盤

mkdir /mysql

mount /dev/sdb1 /mysql

vi /etc/fstab

添加

/dev/sdb1               /mysql                  ext4    defaults        0 0

ESC 按:wq保存退出

 

第一次給Linux硬盤分區格式時不熟悉,只給sdb1分了幾MB大小,後來複製個幾MB文件就滿了,下面這個命令不錯,可以檢查下磁盤空間的使用狀況,免得犯類似錯誤,分區空間大小一目瞭然

df -hl

 

 

配置防火牆

開放mysql端口 

vi /etc/sysconfig/iptables

添加

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

:wq保存

重啓防火牆應用設置

service iptables restart 

 

 

安裝FTP客戶端,否則不能用終端使用FTP命令
rpm -Uvh http://mirror.centos.org/centos/6/os/x86_64/Packages/ftp-0.17-51.1.el6.x86_64.rpm

 

時區配置很重要

http://os.51cto.com/art/201004/192805.htm

 
安裝vmtools
 
 
 
 
三、安裝mysql5.5.28
 
 
1.使用yum安裝或升級一些msyql 所需的程序庫:
 
yum -y install gcc gcc-c++ ncurses-devel make wget

 

 

檢查了下,只需要升級以上就可以成功安裝mysql 5.5.28,就不多裝其他的了,不知道有沒問題

yum 安裝的時候會報錯:Loaded plugins: fastestmirror

vi /etc/yum/pluginconf.d/fastestmirror.conf

把enabled =1改爲enabled =0 就好了

 

2.創建源碼包存放目錄並下載相關軟件

mkdir /mysql/tmp

安裝完了就可以刪,隨便搞個目錄

/mysql                #msyql安裝路徑。先前掛載硬盤時已創建

/mysql/tmp            #安裝包路徑

 

cd /mysql/tmp

 

wget ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-5.5/mysql-5.5.28.tar.gz

wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz

 

3.安裝bison和cmake   


提示:MySQL 5.5 版本的安裝需要這兩個軟件,bison用yum安裝,cmake則用編譯安裝的辦法。

yum -y install bison

tar zxvf cmake-2.8.4.tar.gz

cd cmake-2.8.4/

./configure

gmake

gmake install

cd ..

 

4.安裝mysql 5.5.28

 # 創建mysql運行用戶和組

groupadd mysql

useradd -g mysql -s /sbin/nologin mysql

 

tar zxvf mysql-5.5.28.tar.gz

cd mysql-5.5.28

cmake -DCMAKE_INSTALL_PREFIX=/mysql -DMYSQL_DATADIR=/mysql/data -DSYSCONFDIR=/mysql 

gmake

gmake install

cd /mysql
chmod +w /mysql
chown -R mysql:mysql /mysql
cp ./support-files/my-huge.cnf /etc/my.cnf

編輯my.cnf

vi /etc/my.cnf


[mysqld]段增加
datadir = /mysql/data
wait-timeout = 30
max_connections = 512
max_connect_errors = 10000000
#日誌文件保留天數
expire-logs-days  = 7
安裝數據
./scripts/mysql_install_db --user=mysql

添加系統啓動
cp ./support-files/mysql.server /etc/rc.d/init.d/mysql
chmod 755 /etc/rc.d/init.d/mysql
chkconfig --add mysql
chkconfig --level 3 mysql on

 

四、mysql 初始安裝配置

service mysql start

啓動初始配置嚮導
./bin/mysql_secure_installation

參考:http://tt520.blog.51cto.com/blog/4530575/1114965

 

五、創建數據庫

登錄mysql
/mysql/bin/mysql -u root -p  

創建數據庫
create database test;

創建一個用戶test_a對test數據庫有使用權並有遠程訪問權限
grant all privileges on test.* to 'test_a'@'%' identified by '密碼' with grant option;
刷新權限
flush privileges;
離開
\q

 

六、mysql主從同步配置

 

假設mysql主服務器已經用於生產環境,已經含有多個數據庫並有大量數據,從服務器要保證數據完整,必須首先拷貝這些數據恢復數據庫

主服務器 10.0.0.81

從服務器 10.0.0.82

 

1.主服務器停止mysql服務

service mysql stop

 

2.備份需要同步的數據庫,比如我的是兩個數據庫bbs、ucenter

cd /mysql/data

tar -zcvf /mysql/tmp/bbs.tar.gz  bbs        

tar -zcvf /mysql/tmp/ucenter.tar.gz  ucenter

將數據庫bbs、ucenter打包到/mysql/tmp/目錄

 

3.將主服務器打包好的數據傳到從服務器 /mysql/tmp目錄

怎麼傳就不多說了

 

4.從服務器恢復數據

service mysql stop

cd /mysql/data

 

tar zxvf /mysql/tmp/bbs.tar.gz

tar zxvf /mysql/tmp/ucenter.tar.gz

 

5.假如從服務器預備隨時替換主服務器提供網站讀寫,那麼從服務器必須也建立和主服務器一樣的用戶,替換的時候只需要更新下網站配置文件裏mysql數據庫的地址就OK了

 

6.開始主從配置

主服務器配置

vi /etc/my.cnf

 

檢查修改以下兩項

log-bin=mysql-bin

server-id       = 1

:wq保存退出
 
 
啓動mysql
service mysql start
登錄
/mysql/bin/mysql -u root -p
創建授權用戶
mysql> GRANT REPLICATION SLAVE ON *.* to slave@'%' identified by '123456';
slave爲用戶名
123456爲密碼
 
刷新權限
mysql> flush privileges;
 
查詢master狀態
mysql>show master status;
   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000001 |      107 |              |                  |
   +------------------+----------+--------------+------------------+
   1 row in set (0.00 sec)

 

 

到這裏主服務器配置完成

 

從服務器配置

 

vi /etc/my.cnf

 

log-bin=mysql-bin

server-id       = 2

replicate-ignore-db=mysql          #排除同步的數據庫

:wq保存退出

 

啓動mysql
service mysql start
登錄
/mysql/bin/mysql -u root -p
配置主機成爲複製從
mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.81', MASTER_PORT=3306,MASTER_USER='slave', MASTER_PASSWORD='123456';

 

啓動從服務器複製功能

Mysql>start slave;

檢查從服務器複製狀態

mysql> show slave status\G

 

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 10.0.0.81

                  Master_User: slave

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000001

          Read_Master_Log_Pos: 107

               Relay_Log_File: localhost-relay-bin.000001

                Relay_Log_Pos: 107

        Relay_Master_Log_File: mysql-bin.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB:

          Replicate_Ignore_DB: mysql

 
狀態是正常的,如果下兩項是no,就要查找哪裏配置錯誤了

 

 

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

 

如何檢查同步功能是否正常就不多說了

到此主從配置完工

 

七、從服務器添加mysql定時打包計劃任務

 

每天定時將mysql數據庫打包並上傳到FTP服務器,並刪除本機和FTP服務器指定日期前的備份文件,防止硬盤爆滿,FTP服務器是win2003系統,安裝盛大網盤,數據實時同步到網盤上,多方面保證數據安全

mkdir /mysql/dbbackup

vi /mysql/dbbackup/mysql-bak.sh

創建備份目錄和mysql-bak.sh文件,加入如下內容


#!/bin/bash
data_dir=/mysql/data/
backup_dir=/mysql/dbbackup/
# 停止MySQL數據庫
/etc/init.d/mysql stop
# 進入MySQL數據庫目錄
cd  ${data_dir}
# 壓縮打包數據庫bbs和ucenter到指定目錄
tar -zcvf ${backup_dir}bbs/bbs$(date +%Y%m%d).tar.gz  bbs
tar -zcvf ${backup_dir}uc/uc$(date +%Y%m%d).tar.gz  ucenter
# 啓動MySQL數據庫
/etc/init.d/mysql start
# 刪除20天以前本機數據備份文件
find ${backup_dir} -mtime +20 -type f -name *.tar.gz -exec rm -f {} \;
# 上傳到FTP服務器
FTP_USER=user                    # ftp用戶名
FTP_PASS=12345                 # ftp密碼
FTP_IP=10.0.0.200               # ftp地址
deldate=` date -d -20day +%Y%m%d `   # 指定FTP服務器上20天之前的文件將被刪除

ftp -v -n $FTP_IP << END
user $FTP_USER $FTP_PASS
bin
lcd /mysql/dbbackup/bbs
cd /bbs
put bbs$(date +%Y%m%d).tar.gz
mdelete bbs$deldate.tar.gz
lcd /mysql/dbbackup/uc
cd /uc
put uc$(date +%Y%m%d).tar.gz
mdelete uc$deldate.tar.gz
close
bye
END


2.增加執行權限 
chmod +x /mysql/dbbackup/mysql-bak.sh

 
3.添加定時任務,每天5點00分執行任務
crontab -e
按a鍵進入編輯狀態添加
00 05 * * * /mysql/dbbackup/mysql-bak.sh
esc鍵退出編輯狀態,:wq保存退出
每天5點鐘運行任務

crontab -l 查詢目前任務
crontab -r 刪除任務

 

 

ftp服務器配置不寫了,到此收工

本配置還有需要完善的地方,比如日誌文件如果不加限定,會將硬盤撐滿

另外數據恢復的實例還需要加上

等學習下資料再完善

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章