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服务器配置不写了,到此收工

本配置还有需要完善的地方,比如日志文件如果不加限定,会将硬盘撑满

另外数据恢复的实例还需要加上

等学习下资料再完善

 

 

 

 

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