您当前的位置:首页 > 互联网教程

浅谈MySQL数据库备份的几种方法

发布时间:2025-05-21 20:36:01    发布人:远客网络

浅谈MySQL数据库备份的几种方法

一、浅谈MySQL数据库备份的几种方法

mysql常见的备份方式有:mysqldump、mysqlhotcopy、BACKUP TABLE、SELECT

INTOOUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。MyISAM表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb所有的表都保存在同一个数据文件 ibdata1中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份

mysqldump是采用SQL级别的备份机制,它将数据表导成 SQL脚本文件,在不同的 MySQL版本之间升级时相对比较合适,这也是最常用的备份方法。

示例:mysqldump-uroot-p database table>/home/jobs/back.sql

mysqldump也可做增量备份,mysqldump相关参数网上较多,就不在此一一赘述了

2.mysqlhotcopy备份【如果是企业版的mysql可以用mysqlbackup当然是要收费的】

mysqlhotcopy是一个 PERL程序。它使用 LOCK TABLES、FLUSH

来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。

mysqlhotcopy只能用于备份 MyISAM,并且只能运行在类Unix和 NetWare系统上。

mysqlhotcopy支持一次性拷贝多个数据库,同时还支持正则表达。

示例: root#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root

-p=123456 database/tmp(把数据库目录 database拷贝到/tmp

下)root#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=123456

db_name_1... db_name_n/tmproot#/usr/local/mysql/bin/mysqlhotcopy

-h=localhost-u=root-p=123456 db_name./regex/

/tmp更详细的使用方法请查看手册,或者调用下面的命令来查看 mysqlhotcopy的帮助:

perldoc/usr/local/mysql/bin/mysqlhotcopy注意,想要使用 mysqlhotcopy,必须要有

SELECT、RELOAD(要执行 FLUSH TABLES)权限,并且还必须要能够有读取 datadir/db_name目录的权限。

还原mysqlhotcopy备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld

指定的 datadir(在这里是/usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例: root#cp

-rf db_name/usr/local/mysql/data/root#chown-R nobody:nobody

/usr/local/mysql/data/(将 db_name目录的属主改成 mysqld运行用户)

3.1备份BACKUP TABLE语法其实和 mysqlhotcopy

的工作原理差不多,都是锁表,然后拷贝数据文件。它能实现在线备份,但是效果不理想,因此不推荐使用。它只拷贝表结构文件和数据文件,不同时拷贝索引文

件,因此恢复时比较慢。例子: BACK TABLE tbl_name TO‘/tmp/db_name/‘;注意,必须要有 FILE

权限才能执行本SQL,并且目录/tmp/db_name/必须能被 mysqld用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。

恢复用 BACKUP TABLE方法备份出来的文件,可以运行 RESTORE TABLE语句来恢复数据表。例子: RESTORE TABLE FROM‘/tmp/db_name/‘;权限要求类似上面所述。

3.2 SELECT INTO OUTFILE则是把数据导出来成为普通的文本文件,可以自定义字段间隔的方式,方便处理这些数据。例子:

SELECT INTO OUTFILE‘/tmp/db_name/tbl_name.txt‘ FROM tbl_name;注意,必须要有

FILE权限才能执行本SQL,并且文件/tmp/db_name/tbl_name.txt必须能被 mysqld

用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。

用 SELECT INTO OUTFILE方法备份出来的文件,可以运行 LOAD DATA INFILE语句来恢复数据表。例子: LOAD

DATA INFILE‘/tmp/db_name/tbl_name.txt‘ INTO TABLE

tbl_name;权限要求类似上面所述。倒入数据之前,数据表要已经存在才行。如果担心数据会发生重复,可以增加 REPLACE

关键字来替换已有记录或者用 IGNORE关键字来忽略他们。

采用 binlog的方法相对来说更灵活,省心省力,而且还可以支持增量备份。

启用 binlog时必须要重启 mysqld。首先,关闭 mysqld,打开 my.cnf,加入以下几行:

然后启动 mysqld就可以了。运行过程中会产生 binlog.000001以及 binlog.index,前面的文件是 mysqld

记录所有对数据的更新操作,后面的文件则是所有 binlog的索引,都不能轻易删除。关于 binlog的信息请查看手册。

需要备份时,可以先执行一下 SQL语句,让 mysqld终止对当前 binlog

的写入,就可以把文件直接备份,这样的话就能达到增量备份的目的了: FLUSH LOGS;如果是备份复制系统中的从服务器,还应该备份

master.info和 relay-log.info文件。

备份出来的 binlog文件可以用 MySQL提供的工具 mysqlbinlog来查看,如:

/usr/local/mysql/bin/mysqlbinlog/tmp/binlog.000001该工具允许你显示指定的数据库下的所有

SQL语句,并且还可以限定时间范围,相当的方便,详细的请查看手册。

恢复时,可以采用类似以下语句来做到:/usr/local/mysql/bin/mysqlbinlog/tmp/binlog.000001

| mysql-uyejr-pyejr db_name把 mysqlbinlog输出的 SQL语句直接作为输入来执行它。

如果你有空闲的机器,不妨采用这种方式来备份。由于作为 slave的机器性能要求相对不是那么高,因此成本低,用低成本就能实现增量备份而且还能分担一部分数据查询压力,何乐而不为呢?

可以参考

每天中午12点和晚上12点做一次全备,每隔一小时备份binlog,也就是增量备份,具体操作如下:

/etc/my.cnf中的mysqld部分加入:

%mysql%/my.ini中的mysqld部分加入:

完整备份脚本(仅提供部分作参考)

如果数据库数据量比较大,可以一天全备一次,再每隔一小时增量备份一次;

# use mysqldump--help,get more detail.

LogFile=/backup/mysql/mysqlbak.log

echo"-------------------------------------------">>$LogFile

echo$(date+"%y-%m-%d%H:%M:%S")>>$LogFile

echo"--------------------------">>$LogFile

mysqldump--quick--all-databases--flush-logs

--delete-master-logs--lock-all-tables

echo"Dump Done">>$LogFile

tar czvf$GZDumpFile$DumpFile>>$LogFile 2>&1

echo"[$GZDumpFile]Backup Success!">>$LogFile

#delete previous daily backup files:采用增量备份的文件,如果完整备份后,则删除增量备份的文件.

echo"please Check$BakDir Directory!"

echo"copy it to your local disk or ftp to somewhere!!!"

上面的脚本把mysql备份到本地的/backup/mysql目录,增量备份的文件放在/backup/mysql/daily目录下.

增量备份的数据量比较小,但是要在完整备份的基础上操作

/usr/bin/mysqladmin flush-logs

###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名

FILELIST=`cat$HOSTNAME-bin.index`

COUNTER=`expr$COUNTER+ 1 `

增量备份脚本是备份前flush-logs,mysql会自动把内存中的日志放到文件里,然后生成一个新的日志文件,所以我们只需要备份前面的几个即可,也就是不备份最后一个.

因为从上次备份到本次备份也可能会有多个日志文件生成,所以要检测文件,如果已经备份过,就不用备份了.

mysql-hhostname-uusername-ppassword databasename< backupfile.sql

./mysqlbinlog--start-date="2016-04-10 17:30:05"--stop-date="2016-04-10 17:41:28"/usr/local/mysql/data/mysql-bin.000002|mysql-u root-p123456

直接备份数据文件相较前几种方法,备份数据文件最为直接、快速、方便,缺点是基本上不能实现增量备份。

为了保证数据的一致性,需要在靠背文件前,执行以下 SQL语句: FLUSH TABLES WITH READ

LOCK;也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回

注意,对于 Innodb类型表来说,还需要备份其日志文件,即 ib_logfile*文件。因为当 Innodb表损坏时,就可以依靠这些日志文件来恢复。

rsync作为同步工具也可以用来做备份,但要配置服务器端和客户端

示例rsync-vzrtopg--progress--delete root@192.168.1.3::root/tmp/

相关rsync配置可参考

缺点是rsync是根据文件修改时间做的增量备份,所以备份数据库都是全备,并且配置比较麻烦.

7.利用BigDump工具导入超大MySQL数据库备份文件

常用的 MySQL数据库恢复工具(也能进行备份操作)是 phpMyAdmin,这是一个开源、免费的工具,大多数主机商(例如 Hawkhost)都会免费提供。相信很多站长也用过 phpMyAdmin来进行网站数据库的备份和恢复,确实很方便,并且有多国语言界面。不过,有一种情况可能你还没碰到,就是当你的数据库体积比较大时,例如

SQL备份文件大于 2MB,甚至大于 10MB,这个时候如果你通过 phpMyAdmin来进行数据库的恢复,就会出错,显示如下的提示:

这是因为你的 SQL文件体积太大,超过了 phpMyAdmin的处理能力,这种情况在网络速度比较慢的情况下尤为突出,例如站长在周末晚上8点这个网络拥挤的时段尝试使用 phpMyAdmin来恢复大型 MySQL数据库备份,就容易遇到这种问题。

很显然 phpMyAdmin只适用于恢复比较小的 SQL文件备份。对于超大 MySQL数据库备份的恢复,你必须换一个专用的恢复工具,那就是:BigDump!工具下载地址

8.使用bacula(www.bacula.org)进行备份

bacula采用模块化设计,采用c/s构架,理论上可以把任意n台主机的资料备份到任意n台

中,而你不需要在每台机器上都写一个配置文件控制他们运作,所有主要的工作都在一

台director上控制。登陆上director你就可以知道什么备份正在运行,什么备份成功了

,什么备份失败了,所有的log也会集中到你指定的地方,让管理工作更简单一点。恢复

的时候也很简单,简单运行几个命令你就可以把指定的备份恢复。支持完全备份,差异

备份,增量备份;支持把备份写到硬盘文件中,也支持写到磁带中。支持平台相当多,

设置包括win平台(备份win,还不支持备份到win)。当然也有一些缺点,比如对并发备

份支持未经彻底测试,作者宣称最好不要尝试,除非你自己经过测试。还有一点就是文

档中没有一个quick start。。文档太详细了点,没有点耐心读不完。。

bacula有三个模块组成。一个是Director,用于指挥整个系统运行,job schedule,通知

另外两个模块工作。一个是Storage Daemon,它是存储端,负责把网络中传来的数据备

份到本机,恢复的时候负责把数据传出去。最后一个是File Daemon,备份时把文件传出

,恢复时接受数据并恢复。其实上面的三个模块并不能让bacula运行,另外一个模块是

数据库模块。这个模块可以通过SQLite(编译进bacula),也可以使用MySql和PostgreS

ql,作者推荐的是mysql。还需要一些第三方库才能编译:GZIP和Readline。文档中没有

说明,但其实还需要另外一个软件才能保证正常运行:ntp。因为差异备份和增量备份都

依赖于文件修改时间来决定是否备份。单机备份问题不大,网络备份就需要考虑各个主

机的时间差异了。所以我推荐所有主机每天运行两次ntpdate来调准时间。如果你在sjtu

网络里面,可以使用dns.sjtu.edu.cn来调校时间。

如果你使用的是磁带机备份,还需要检查一下你的磁带机是否被支持。而且最好去阅读

文档中的Understanding Pools, Volumes and Labels一节。否则配置的时候你会搞得晕

编译过程很简单,文档也很详细,就不具体介绍了。注意一点是被备份机器上可以使用-

下面说说mysql的建立过程。首先在代码根目录中

如果mysql不是在本机上,可以增加-h参数指定。默认采用空密码的root用户,可以用-p

参数使其采用密码验证。如果要采用其它用户就只能修改脚本了,很简单的。

默认建立的bacula用户,而且是空密码。推荐还是修改密码。

bacula可以使用任意多的数据库,也就是说你可以使用两个数据库,然后再让这两个数

配置前先说明一点需要注意的,配置中指定主机地址时,最好使用ip,我配置时使用主机

名貌似不可以。。而且要是对外的ip,用127.0.0.1不行

fd运行在被备份主机上。配置相当简单,指定哪个Director可以运行调度它,密码是什

么,fd的名字,工作目录,log往哪里发就可以了。修改修改标配就可以了。

sd运行在接受备份的机器上。配置也相当简单,只是比fd多出了一个device用于指定使

用什么硬件备份数据。可以把多个数据备份到一个device,如果是磁带机备份bacula在

恢复的时候会告诉你要使用哪个磁带。因为我使用的是文件备份的模式,所以就给每个

备份配置一个device,把不同的备份放到不同目录去,下面是一个简单文件备份device

Media Type= File#这个随便写,但是在配置Director中的Storage时,必须写一

Archive Device=/var/bak/db#备份到哪个目录,必须存在

二、mssql,mysql,sqlserver三者有何不同

mssql就是SqlServer。全称是:Microsoft SQL Server;是微软旗下的产品。

所以就是mysql和SqlServer的区别了。

易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等;

为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要。

作为一个完备的数据库和数据分析包,SQLServer为快速开发新一代企业级商业应用程序、为企业赢得核心竞争优势打开了胜利之门。

作为重要的基准测试可伸缩性和速度奖的记录保持者,SQLServer是一个具备完全Web支持的数据库产品,提供了对可扩展标记语言(XML)的核心支持以及在Internet上和防火墙外进行查询的能力;

开放性:SQL Server只能windows上运行没有丝毫开放性操作系统系统稳定对数据库十分重要Windows9X系列产品偏重于桌面应用NT server只适合小型企业而且windows平台靠性安全性和伸缩性非常有限象unix样久经考验尤其处理大数据库;

伸缩性并行性:SQL server并行实施和共存模型并成熟难处理日益增多用户数和数据卷伸缩性有限;

安全性:没有获得任何安全证书。

性能:SQL Server多用户时性能佳;

客户端支持及应用模式:客户端支持及应用模式。只支持C/S模式,SQL Server C/S结构只支持windows客户用ADO、DAO、OLEDB、ODBC连接;

使用风险:SQL server完全重写代码经历了长期测试断延迟许多功能需要时间来证明并十分兼容;

体积小、速度快、总体拥有成本低,开源;

是开源数据库,提供的接口支持多种语言连接操作

MySql的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的MySql能很容易充分利用CPU;

MySql有一个非常灵活而且安全的权限和口令系统。当客户与MySql服务器连接时,他们之间所有的口令传送被加密,而且MySql支持主机认证;

支持ODBC for Windows,支持所有的ODBC 2.5函数和其他许多函数,可以用Access连接MySql服务器,使得应用被扩展;

支持大型的数据库,可以方便地支持上千万条记录的数据库。作为一个开放源代码的数据库,可以针对不同的应用进行相应的修改。

拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性;

MySQL同时提供高度多样性,能够提供很多不同的使用者介面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言介面,例如C+,Perl,Java,PHP,以及Python。

可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。MySQL可用于Unix,Windows,以及OS/2等平台,因此它可以用在个人电脑或者是服务器上;

MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变;

没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制;

MySQL的价格随平台和安装方式变化。Linux的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方案则必须付许可费。Unix或Linux自行安装免费、Unix或Linux第三方安装收费。

三、mysql数据库同步问题

现在的网站随着访问量的增加,单一服务器无法承担巨大的访问量,有没有什么方便快捷的方式解决这个问题呢,答案是”有”!

比如建立服务器群,进行均衡负载.

但是如果要解决像电信网通这样的互访问题(中国网民的悲哀..),这个解决办法就无能为力了!

要解决这个问题最方便快捷的方式就是建立镜像网站!由访问者自己选择适合自己网络的速度最快的网站!这样即可以解决线路问题,又可以解决访问量问题!

一类是文件,比如HTML,ASP,PHP等网页文件,或者RAR,ZIP,RM,AVI等可下载文件!

要实现他们的同步很简单,用FTP同步软件就可以了!至于哪几个我会在后面做详细介绍.

一类是数据库数据文件,比如MySQL,SQLServer等等!

数据库同步的方法也很多,最简单的办法只是将数据库目录同步一下就OK了!

在这里用到的主要工具就是FTP,网站文件同步分两种情况,一种是本地到远程,一种是远程到远程(FXP)!第一种不用说了,第二种远程到远程即FXP,支持它的软件也很多,但是真正适合多网站同步镜像的却不多!

下面我介绍几个我认为不错的软件!

1.首先我要推荐的是国产的FTP软件”网络传神”,功能非常强大,特别是在网站的同步镜像方面,可惜的是,这款非常经典的软件已经不再更新了,最后更新时间是2003年3月,最后一个版本是3.12!虽然如此还是非常好用的!下面是一段官方的简介:

网络传神完全吸收了Cuteftp和UpdataNow的全部功能,并且增加了其他软件没有的多项功能:支持网站互传;支持网站同步(UPDATANOW);支持后台上传(多线程上传多个文件);可同时打开多个站点;多站点计划上传功能,支持镜像站点;支持宏操作支持计划操作;支持文件高级比较上传;支持目录隐藏过滤(为用ForntPage作主页的朋友带来福音);服务器自动识别功能;资源管理器浏览方式;可以自定义命令;支持 RFC959标准具有更好的稳定性;完备的信息返回机制及错误监控机制完整的中文帮助。

2.第二款是由ReGet同一开发公司制作的专用于网站同步的软件”WebSynchronizer”,用这款软件,你才会体验到网站同步的方便快捷,简单容易.最新版本是1.3.62,网上能找到XX的最后版本是1.1版!下面是一段简介:

档案同步化工具-WebSynchronizer,由知名续传软件ReGet之软件出版公司所推出,是网站同步化、档案镜像、档案备份的绝佳工具,可以执行下列主要工作:1)本机资料夹及远程资料夹的同步化;2)两台远程计算机中的资料夹同步化;3)两个本机资料之同步化。

3.其他还有一些软件如同步快梭(AutoSyncFTP),也能实现简单的网站同步,不过,这款软件非常不稳定,而且2001年就已经停止开发.所以,不用考虑了!还有上次有朋友提到的SiteMirro,由于网上找不到可以用的版本,所以没有办法测试!

网络传神网站同步镜像使用傻瓜指南

上次在网络技术版已经发过一个简单的使用方法介绍,如果嫌我罗嗦(o(>_<)o),大家可以参考那篇文章:

第一次运行网络传神的时候,它会让你选择”完全模式”和”启动模式”,要使用网站同步必须选择”完全模式”.

进入主界面:你会发现这个软件非常像FlashGet,要使用网站同步功能,点击软件左下角的”FTP客户端”.

现在你要做的就是添加你的镜像母站和需要镜像的网站:文件->站点管理,在里面添加你需要同步的几个的FTP服务器,下面我将介绍具体设置(主要是镜像母站的设置)

母站设置最重要的地方就是”比较目录(网站同步)”:

就是手动拖动传送时候的传送方式,非拖动方式不受影响,因为母站的更新基本上是从本地目录进行的,所以建议这里选择第二项”只上传不同的文件”,镜像站点这里可以忽略

这个功能非常有用,可以通过文件长度和文件日期进行文件差异对比.

你还可以设置本地目录过滤和服务器目录过滤,非常灵活!

好了,添加好母站和镜像站之后,我们来设置同步:

如果是添加镜像站,则会跳出下面的母站选择窗口:

设置好多个镜像站点之后,返回主界面就可以进行网站同步了:

一般不要改动镜像站点前面的“对钩”标志,因为镜像站点同步的原理是“根据主站点的同步信息更新镜像站点”,如果景象站点没有更新那么必须将该镜像站点单独同步。

注意一般应该“选项窗口”-〉“FTP客户端”-〉“计划”中的“最大连接个数”和“最大线程个数”一般不要改动保持为“1”。

如果同步时某个站点出错同步没有完全完成只需按“计划”窗口中的按钮单独执行某个站点的传送即可。

再介绍一下网站镜像同步中必要的功能,定时同步,这样你就只要做好母站的更新,其他的让网络传神帮你完成:

进入网络传神的选项设置窗口,选中FTP客户端中的定时同步

定时下载:在指定的时段内下载文件。

定时上传:在指定的时段内用网站同步的方法进行上传。

开始时间:如果要使用定时方式必须设置此项,在设置的时间中会自动开始所有设置为计划的站点。

停止时间:如果设置此项则当系统时间大于停止时间时自动停止所有设置为计划的站点。

注意:定时上传种没有“停止时间”选项,网站同步完成后会自动停止,同时网站同步同一时间只能运行一次。

网络传神还有很多为便于同步镜像设置的功能,大家实际使用中去体会吧!

WebSynchronizer网站同步镜像使用傻瓜指南

WebSynchronizer功能非常强大,不单单是网站同步,还可以进行本地目录同步,本地到远程同步,功能方面远胜过传神,不过,国内好像没有汉化版,对于一些对英文感冒的朋友用起来会不太舒服,希望CCF里的汉化高手能将他中文化!

开始运行程序,老外的软件就是智能,一打开这个软件就会有一个同步向导跳出来!

在这里,你也看出来了吧,这个软件只支持两个目录间的同步.不过,我们可以创建多个项目来解决这个问题!具体我在后面介绍!这里,我们来看看如何建立两个远程目录的同步!

网站同步当然是选择第一项了!再进入下一步,要你选择同步的第一个服务器,建议在这里serverslist,先编辑好需要同步的几个FTP

第一项的意思是:上传下载所有改变的文件

第二项的意思是:不改变文件夹内容,只下载新的文件

点击下一步进行第二个服务器设置,方法和第一个一样!

设置完成后,你还可以修改任务名称!

我觉得这点就是这个软件非常优秀的地方,以任务的方式进行管理.非常方便!

OK,现在我们就可以看到他的主界面了!

还有一点要提,他的计划任务更能也很强大,在这里我就不再多说了!用过才知道他的强大!

有朋友会说,我要进行两个以上的网站同步怎么办?

很简单,再多建几个任务就可以了,要镜像多少网站都没有问题!

这个软件的网站同步镜像可以非常灵活,比如可以本地-远程,然后再远程-远程!或者本地-远程1,本地-远程2,远程1-远程2,任何情形下的同步都可以完成!

说完了文件同步,我们再来探讨一下数据库同步!

这里我主要教大家两种最常用的数据库的同步方法!

1.利用MySQL自身的数据库同步功能

2.利用MySQL数据库的特性(数据库存在固顶目录,并且以文件形式存储),进行数据库目录同步以达到数据同步目的

3.利用专用的MySQL数据库同步软件

1.利用MySQL自身的数据库同步功能(下面参考自网上的文章,写的非常详细了)

MySQL从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能.

数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件(一般是my.cnf),在unix环境下在/etc/mysql/my.cnf或者在mysql用户的home目录下的my.cnf。

windows环境中,如果c:根目录下有my.cnf文件则取该配置文件。当运行mysql的winmysqladmin.exe工具时候,该工具会把c:根目录下的my.cnf命名为mycnf.bak。并在winnt目录下创建my.ini。mysql服务器启动时候会读该配置文件。所以可以把my.cnf中的内容拷贝到my.ini文件中,用my.ini文件作为mysql服务器的配置文件。

操作系统:window2000professional

1.增加一个用户最为同步的用户帐号:

GRANTFILEON*.*TObackup@'10.10.10.53'IDENTIFIEDBY‘1234’

2.增加一个数据库作为同步数据库:

1.增加一个用户最为同步的用户帐号:

GRANTFILEON*.*TObackup@'10.10.10.22'IDENTIFIEDBY‘1234’

2.增加一个数据库作为同步数据库:

修改Amysql的my.ini文件。在mysqld配置项中加入下面配置:

#设置需要记录log可以设置log-bin=c:mysqlbakmysqllog设置日志文件的目录,

#其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。

binlog-do-db=backup#指定需要日志的数据库

用showmasterstatus命令看日志情况。

修改Bmysql的my.ini文件。在mysqld配置项中加入下面配置:

master-user=backup#同步用户帐号

master-connect-retry=60预设重试间隔60秒

replicate-do-db=backup告诉slave只做backup数据库的更新

用showslavestatus看同步配置情况。

注意:由于设置了slave的配置信息,mysql在数据库目录下生成master.info

所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。

如果在A加入slave设置,在B加入master设置,则可以做B->A的同步。

在A的配置文件中mysqld配置项加入以下设置:

在B的配置文件中mysqld配置项加入以下设置:

注意:当有错误产生时*.err日志文件。同步的线程退出,当纠正错误后要让同步机制进行工作,运行slavestart

重起AB机器,则可以实现双向的热备。

向B批量插入大数据量表AA(1872000)条

A数据库每秒钟可以更新2500条数据。

2.数据库目录同步,方法和文件同步一样,设置好需要同步的两个数据库目录就可以了!

缺点很明显,数据同步只能单向进行,可以作为备份方案

3.用专用的MySQL同步软件进行同步

这方面的软件有SQLBalance和MyReplicator,优点是方便直观,还有很多争强功能!

当然你也可以修改镜像网站的程序为提交数据到母数据库,读取则在当前镜像下的数据,不过,修改起来麻烦!普通用户修改也非常难!呵呵,大家了解一下就可以!给大家一个思路!有能力的朋友可以试试阿!

由于数据来源的不可控制(不好表达),论坛数据是实时的,而且还要考虑来自镜像论坛的数据,如何实现镜像论坛与母论坛数据同步呢?

用1中介绍的MySQL自带的数据库同步功能互相备份模式就可以实现的!

不过,具体的应用我没有测试!稳定性不敢保证!

有能力的朋友推荐用下面这种思路来同步,相对来说减少点效率,但能减少发生的错误!

1.母论坛和镜像论坛的数据全写在母论坛数据库里,主从模式,读取只在本地读取,这个需要修改程序!

2.每次写数据,都同时提交到两个数据库中,安全,但是效率很差,也得修改程序!

MSSQL数据同步利用数据库复制技术实现数据同步更新(来自网络,也是非常完美的教程)

复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。

出版服务器、订阅服务器、分发服务器、出版物、文章

SQLSERVER主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器

SQLSERVER提供了三种复制技术,分别是:

1、快照复制(呆会我们就使用这个)

只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。

(2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令

(3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。

(4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution)

(2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框

(3)选择要创建出版物的数据库,然后单击[创建发布]

(4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)

(5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQLSERVER2000"的数据库服务器

(6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表

(7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。

(2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]

(3)按照单击[下一步]操作直到系统会提示检查SQLSERVER代理服务的运行状态,执行复制操作的前提条件是SQLSERVER代理服务必须已经启动。

完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:/ProgramFiles/MicrosoftSQLServer/MSSQL/REPLDATA/unc/XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表—

--测试环境,SQLServer2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test

--服务器上的表(查询分析器连接到服务器上创建)

createtable[user](idintprimarykey,numbervarchar(4),namevarchar(10))

--本机的表,state说明:null表示新增记录,1表示修改过的记录,0表示无变化的记录

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[user]')andOBJECTPROPERTY(id,N'IsUserTable')=1)

createtable[user](idintidentity(1,1),numbervarchar(4),namevarchar(10),statebit)

--创建触发器,维护state字段的值

from[user]ajoininsertedbona.id=b.id

--为了方便同步处理,创建链接服务器到要同步的服务器

--这里的远程服务器名为:xz,用户名为:sa,无密码

ifexists(select1frommaster..sysserverswheresrvname='srv_lnk')

execsp_dropserver'srv_lnk','droplogins'

execsp_addlinkedserver'srv_lnk','','SQLOLEDB','xz'

execsp_addlinkedsrvlogin'srv_lnk','false',null,'sa'

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_synchro]')andOBJECTPROPERTY(id,N'IsProcedure')=1)

dropprocedure[dbo].[p_synchro]

--execmaster..xp_cmdshell'isql/S"xz"/U"sa"/P""/q"execmaster..xp_cmdshell''netstartmsdtc'',no_output"',no_output

--execmaster..xp_cmdshell'netstartmsdtc',no_output

--进行分布事务处理,如果表用标识列做主键,用下面的方法

deletefromsrv_lnk.test.dbo.[user]

whereidnotin(selectidfrom[user])

insertintosrv_lnk.test.dbo.[user]

selectid,number,namefrom[user]wherestateisnull

updatesrv_lnk.test.dbo.[user]set

update[user]setstate=0whereisnull(state,1)=1

--创建作业,定时执行数据同步的存储过程

ifexists(SELECT1frommsdb..sysjobswherename='数据处理')

EXECUTEmsdb.dbo.sp_delete_job@job_name='数据处理'

execmsdb..sp_add_job@job_name='数据处理'

declare@sqlvarchar(800),@dbnamevarchar(250)

select@sql='execp_synchro'--数据处理的命令

,@dbname=db_name()--执行数据处理的数据库名

execmsdb..sp_add_jobstep@job_name='数据处理',

@step_name='数据同步',

EXECmsdb..sp_add_jobschedule@job_name='数据处理',

@freq_interval=1,--每天执行一次

@active_start_time=00000--0点执行

see to