教你怎样实现MySQL数据库双机热备份_MySQL
双机热备份
本文详细讲述了怎样实现MySQL数据库双机热备份。
1、MySQL数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好MySQL数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备份数据库中。实现MySQL数据库的热备份。
2、要想实现双机的热备首先要了解主从数据库服务器的版本的需求。要实现热备MySQL的版本都要高于32,还有一个基本的原则就是作为从数据库的数据库版本可以高于主服务器数据库的版本,但是不可以低于主服务器的数据库版本。
3、设置主数据库服务器:
a首先查看主服务器的版本是否是支持热备的版本。然后查看mycnf(类Unix)或者myini(Windows)中MySQLd配置块的配置有没有log-bin(记录数据库更改日志),因为MySQL的复制机制是基于日志的复制机制,所以主服务器一定要支持更改日志才行。然后设置要写入日志的数据库或者不要写入日志的数据库。这样只有您感兴趣的数据库的更改才写入到数据库的日志中。
server-id=1 //数据库的id这个应该默认是1就不用改动
log-bin=log_name //日志文件的名称,
//这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称
binlog-do-db=db_name //记录日志的数据库
binlog-ignore-db=db_name //不记录日志的数据库
以上的如果有多个数据库用","分割开,然后设置同步数据库的用户账号。
MySQL> GRANT REPLICATION SLAVE ON
-> TO 'repl'@'%mydomaincom' IDENTIFIED BY 'slavepass';
4MySQL02以前的版本, 因为不支持REPLICATION 要使用下面的语句来实现这个功能:
MySQL> GRANT FILE ON
-> TO 'repl'@'%mydomaincom' IDENTIFIED BY 'slavepass';
设置好主服务器的配置文件后重新启动数据库。
b锁定现有的数据库并备份现在的数据:
锁定数据库:
MySQL> FLUSH TABLES WITH READ LOCK;
备份数据库有两种办法一种是直接进入到MySQL的data目录然后打包你需要备份数据库的文件夹,第二种是使用MySQLdump的方式来备份数据库但是要加上"--master-data " 这个参数,建议使用第一种方法来备份数据库。
c查看主服务器的状态:
MySQL> show master status\G;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| MySQL-bin003 | 73 | test | manual,MySQL |
+---------------+----------+--------------+------------------+
记录File 和 Position 项目的值,以后要用的。
d然后把数据库的锁定打开:
MySQL> UNLOCK TABLES;
4、设置从服务器:
a首先设置数据库的配置文件:
server-id=n //设置数据库id默认主服务器是1
//可以随便设置但是如果有多台从服务器则不能重复。
master-host=db-mastermycompanycom //主服务器的IP地址或者域名
master-port=3306 //主数据库的端口号
master-user=pertinax //同步数据库的用户
master-password=freitag //同步数据库的密码
master-connect-retry=60 //如果从服务器发现主服务器断掉,重新连接的时间差
report-host=db-slavemycompanycom //报告错误的服务器
b把从主数据库服务器备份出来的数据库导入到从服务器中;
c然后启动从数据库服务器,如果启动的时候没有加上"--skip-slave-start"这个参数则进入到MySQL中:
MySQL> slave stop;//停止slave的服务
d设置主服务器的各种参数:
MySQL> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主服务器的IP地址
-> MASTER_USER='replication_user_name', //同步数据库的用户
-> MASTER_PASSWORD='replication_password', //同步数据库的密码
-> MASTER_LOG_FILE='recorded_log_file_name',
//主服务器二进制日志的文件名(前面要求记住的参数)
-> MASTER_LOG_POS=recorded_log_position;
//日志文件的开始位置(前面要求记住的参数)
e启动同步数据库的线程:
MySQL> slave start;
查看数据库的同步情况吧。如果能够成功同步完成了。
f查看主从服务器的状态:
MySQL> SHOW PROCESSLIST\G //可以查看MySQL的进程看看是否有监听的进程
如果日志太大清除日志的步骤如下:
1>锁定主数据库:
MySQL> FLUSH TABLES WITH READ LOCK;
2>停掉从数据库的slave:
MySQL> slave stop;
3>查看主数据库的日志文件名和日志文件的position:
show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+---------------+----------+--------------+------------------+
| louis-bin001 | 79 | | MySQL |
+---------------+----------+--------------+------------------+
4>解开主数据库的锁:
MySQL> unlock tables;
5>更新从数据库中主数据库的信息:
MySQL> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主服务器的IP地址
-> MASTER_USER='replication_user_name', //同步数据库的用户
-> MASTER_PASSWORD='replication_password', //同步数据库的密码
-> MASTER_LOG_FILE='recorded_log_file_name',
//主服务器二进制日志的文件名(前面要求记住的参数)
-> MASTER_LOG_POS=recorded_log_position; //日志文件的开始位置(前面要求记住的参数)
6>启动从数据库的slave:
MySQL> slave start;
1、你可以在数据库A做计划任务,用exp或者expdp导出,然后scp或者rsync到服务器B
例如计划任务0 0 /data1/backup/expdp_db_baksh;
expdp_db_baksh内容:
#!/bin/sh
~/bash_profile
dst=/data1/backup/db_bak
today=`date +%F`
bakfile=expdp_db_${today}dmp
logfile=expdp_db_${today}log
expdp 'user01/778899' DIRECTORY=expdp_dir1 parallel=2 \
dumpfile=$bakfile SCHEMAS=user01 logfile=$logfile COMPRESSION=all
scp -P22 $bakfile oracle@1721615:/data1/backup/db_bak
exit 0;
2、也可以在服务器B用exp直接导出数据
exp 'user01/778899@DB01' file=$bakfile FULL=Y log=baklog
3、开启归档模式,在服务器A用rman 做全备或增量备份,然后将备份同步到服务器B
指定路径
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/data1/rman/full_%d_%U';
全备份,默认Format
backup incremental level 0 database;
增量备份
backup incremental level 1 database;
将备份rsync 到服务器B
/usr/bin/rsync -av '-e ssh -p 22' oracle@1721611:/data1/rman /data1
4、开启归档模式,在服务器AB间配置DATAGURAD,同步数据
步骤/方法
1
首先,我们在平台服务器上必须设置好自动备份。如果我们用的是SQLServer,可以用数据库维护计划来操作,MySQL应该也有相应的程序或软件。这里不再赘述,这篇文章主要介绍的是自动异地备份,本地备份必须先做好。
2
其次,FTP软件要装好,可以用IIS自带的,也可以用Serv-U之类的FTP软件。然后设置一个FTP用户名和密码,指向数据库备份目录。
3
在备份数据库上,建立一个bat的批处理文件,内容如下:
"D:\wgetexe" -x -c -T 5 -w 0 -N -r -l inf -nH –ftp-user=mybackup –ftp-password=mybackup -P E:\BackUp\ "ftp://11111111"
其中wgetexe这个文件类似于Linux下的wget命令,Windows中也有相应的程序,网上可以下载到。比如我们把它放到D盘,路径就是D:\wgetexe了,mybackup是FTP用户名密码,E:\Backup\是备份服务器上的备份存储路径,最后是主站服务器的IP或域名。
4
把这个bat文件添加到备份服务器的计划任务中,让他定期执行。非常重要的数据库可每天执行一次到两次,注意观察执行结果,确保完全自动。
步骤阅读
在服务器2 数据库2的查询分析器里执行:
insert into 新表名
select
from OPENDATASOURCE('SQLOLEDB','Data Source=服务器1;User ID=sa1;Password=123) 数据库1dbo表1
OPENDATASOURCE
不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。
对于服务器而言,它承担的使命是7x24小时不间断的对外提供服务,但它面临的风险也是很大的,无论是人为误操作、硬件损坏还是黑客攻击,难免有数据损坏丢失的时候。一旦发生数据损坏、丢失现象后,如果没有备份数据,那损失就大了,所以对于任何一台服务器而言,数据的备份机制是不可缺少的。
服务器根据提供的服务不同,大致可为分:数据库服务器、应用服务器、文件服务器。不同服务器的备份机制还是有所区别的,我们分别来看下:
文件服务器备份方案有哪些?
1、Rsync+Inotify实时增量备份
借助Linux的Inotify特性可以监测文件系统变化,一旦发现变化则通知Rsync去同步数据,这样就实现了增量备份,而且性能和及时性都很高。
2、通过服务器定时任务每日凌晨执行备份任务
这种只适合对重要的数据进行日切备份,大概思路就是:Crontab+shell脚本来定时备份。
3、云服务器可借助快照功能来全盘备份
数据库服务器备份方案
对于数据库而言建议部署“主从同步”来实现数据备份,这样做的好处就是:一方面存在数据副本,另外一方面多节点可以缓解数据库压力。
当然了,现在主流数据库也提供全量备份的功能,但如果在数据量大的情况下可能会影响数据库的性能。
1、以主流的MySQL数据库为例,备份方案主要有:
binlog备份
mysqldump全库备份
2、SQLServer也支持完全备份、事务日志备份、差异备份等:
以上就是我的观点,对于这个问题大家是怎么看待的呢?1、按照你所说的思路,你可以写个shell脚本:设个定时任务
第一步,先生成个dmp文件,规定命名格式
第二步,调用ftp,scp之类工具,将该dmp文件上传到你指定的远程服务器上面。
2、根据你的需求,你可以考虑使用expdp的一个特性。
expdp/impdp有个network_link选项。
比如expdp,使用该选项可以直接在本地进行远程库的备份,并且将备份文件放在在本地。
也就是,在你的b服务器上面直接对a服务器上的数据库进行expdp操作,会在b服务器上面生成dmp文件。
具体关于network_link的用法,还需你自己加以学习。
0条评论