论坛的mysql数据库备份一直以来采取冷备模式,每天一次,网站必须中断访问一段时间,前期还好,数据库小,分把钟就解决问题,随着数据库越来越大,每次备份所需的时间也越来越长,这种方式显然已不合适了。
网上搜索解决方案,下面这种方案感觉应该可以满足论坛现阶段的要求。
ESXI5.0 上创建两台虚拟机作为mysql服务器,一主一从,主服务器提供论坛msyql访问,从服务器用来定时备份,备份时并不影响网站正常访问,并将数据打包上传到Windows 2000的FTP服务器,Windows 服务器再同步到盛大网盘,同时达到异地和网络备份的目的,保障数据安全。
下面是通过学习整理的相关操作步骤:
一、创建两台虚拟机
创建两块虚拟磁盘,一块10GB,一块50GB。10GB磁盘安装系统,打算配置优化完成之后采用ESXI 磁盘的非持久模式,这样一旦系统出问题,关机即可还原系统。50GB磁盘使用持久模式,用来存放mysql数据
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
检查了下,只需要升级以上就可以成功安装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
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
到这里主服务器配置完成
从服务器配置
vi /etc/my.cnf
log-bin=mysql-bin
server-id = 2
replicate-ignore-db=mysql #排除同步的数据库
:wq保存退出
启动从服务器复制功能
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
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服务器配置不写了,到此收工
本配置还有需要完善的地方,比如日志文件如果不加限定,会将硬盘撑满
另外数据恢复的实例还需要加上
等学习下资料再完善