> 数据库 > MySQL >

mysql网站程序以及数据库实时备份方案

mysql1.png

Mysql1和mysql2都配置lamp环境,这边就不在叙述,网站默认路径 /var/www/html/

一:在mysql1上的安装配置(网站程序在mysql1)

1.首先下载并且安装inotify,rsync

Inotify的安装

[root@mysql1 ~]# tar zxvf inotify-tools-3.14.tar.gz
[root@mysql1 ~]# cd inotify-tools-3.14
[root@mysql1 inotify-tools-3.14]# ./configure
[root@mysql1 inotify-tools-3.14]# make
[root@mysql1 inotify-tools-3.14]# make install Rsync的安装

[root@mysql1 ~]# tar zxvf rsync-3.0.8.tar.gz
[root@mysql1 ~]# cd rsync-3.0.8
[root@mysql1 rsync-3.0.8]# ./configure
[root@mysql1 rsync-3.0.8]# make
[root@mysql1 rsync-3.0.8]# make install 2.配置ssh认证,目的是为了实时同步的时候不需要输入密码,在服务器端执行ssh-kengen命令生成公钥

mysql2.png

然后在mysql2(192.168.2.3)上建立.ssh目录


[root@mysql2 ~]# mkdir /root/.ssh 并回到mysql1(192.168.2.2)上拷贝公钥到客户端并重命名为authorized_keys

mysql3.png

配置实时同步的脚本,我的脚本路径放到了网站根目录下,为了以后备份方便

[root@mysql1 html]# vi rsync.sh
#!/bin/sh
src=/var/www/html/
des=/var/www/html/
ip=192.168.2.3
inotifywait -mrq --timefmt '%d/%m/%y-%H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${src} | while read
file
do
for i in $ip
do
/usr/local/bin/rsync   -aP   --delete  $src root@$ip:$des
done
done
[root@mysql1 html]# chmod 755 rsync.sh 在服务端修改,创建文件,相当于一个动作会触发inotify,如果没有动作,默认是不同步。

测试,在后台运行rsync.sh

[root@mysql1 html]# ./rsync.sh &
[1] 8868 然后创建一个文件

[root@mysql1 html]# mkdir ceshi 可以看到网站目录以及新创建的ceshi目录全部开始同步

mysql4.png

现在我们在192.168.2.3上验证

mysql5.png

然后在192.168.2.2上删除ceshi这个目录

mysql6.png

192.168.2.3上则同步成功

mysql7.png

二.配置mysql主从

mysql1为主配置如下

修改mysql配置文件添加

[root@mysql1 html]# vi /etc/my.cnf
server-id=1
log-bin=mysql-bin 然后重启mysql服务让修改的配置生效

[root@mysql1 html]# service mysqld restart 登录mysql,在mysql中添加一个backup的账号,并授权给从服务器

[root@mysql1 html]# mysql -uroot -p
Enter password:
mysql> grant replication slave on *.* to 'backup'@'192.168.2.3' identified by 'backup';
Query OK, 0 rows affected (0.02 sec) 3)、查询主数据库状态,并记住FILE及Position的值,

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      106 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec) 在从服务器的配置(192.168.2.3)

[root@mysql2 html]# vi /etc/my.cnf
server-id=2
log-bin=mysql-bin 然后重启mysql服务让修改的配置生效

[root@mysql2 html]# service mysqld restart
[root@mysql2 html]# mysql -uroot -p
Enter password:
mysql>slave stop;
mysql>change master to
master_host='192.168.2.2',master_user='backup',master_password='backup',master_log_file='mysql
bin.000001',master_log_pos=106;
mysql>slave start; 检查主从同步,如果您看到Slave_IO_Running和Slave_SQL_Running均为Yes,则主从复制连接正常

mysql> show slave status\G mysql8.png

验证配置是否正常,mysql主从能否正常复制

在主数据库上新建一个linuxpub_phpbb库,并且在库中导入数据库文件

[root@mysql1 html]# mysql -uroot -p
mysql> create database linuxpub_phpbb;
Query OK, 1 row affected (0.05 sec)
mysql> use linuxpub_phpbb;
Database changed
mysql> source /root/1.sql
Query OK, 0 rows affected (0.03 sec) 查看数据库是否存在

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| linuxpub_phpbb     |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

在从数据库上验证

[root@mysql2 html]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| linuxpub_phpbb     |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.10 sec) 数据库同步成功

这时配置完成,如果mysql1服务器挂掉,只需要把域名解析到mysql2上即可。然后我们就有时间来恢复mysql1了并不

误网站的运行。同步数据使用内网ip既节省了托管带宽费用又提高了数据安全性和传输速率


 
(责任编辑:IT)