当前位置:文档之家› mysql 数据库的同步问题(双机热备)

mysql 数据库的同步问题(双机热备)

1.注意linux下有大小写区分,而win2k下没有
所以最好使用mysqldump方法来让两个数据库初始化同步,而不能使用tar方式直接copy数据库表文件
使用mysql studio来作database backup也不错
2.注意win2k下的mysql配置文件是c:\my.ini
你可以使用mysql administrator 0.9这个图型界面的实用工具来设置
3.如果win2k下的mysql为master ,一定要注意show master status中显示出来的结果
4. win2k下的mysql为slave时,注意不要把同步时间周期设置太长。
*******相关命令:
stop slave #停止同步
start slave #开始同步,从日志终止的位置开始更新。
LOAD DATA FROM MASTER #从机执行,从主机端重新读入所有的数据。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout和net_write_timeout的值
CHANGE MASTER TO master_def_list#在线改变一些主机设置,多个用逗号间隔,比如
4. slave是从master的bin-log是读取sql记录来同步,所以,从哪一条log开始读取很重要(下面的第7条操作,就是保证slave能与master保持相同的记录读取,并读取正确的bin-log日志文件)
6.
7.在slave执行下面sql操作
mysql> CHANGE MASTER TO
mysql数据库的同步问题(双机热备)
网上有不少关于mysql数据库服务器的数据同步文章,其实只有二位朋友发表的文章,其他都是转抄。
而这些文章中,仅对数据同步过程的操作作了一个记录,而没有把操作方法,原理与一些过程中出现的问题说明清楚。
因为工作需要,我公司需要对美国服务器上的mysql数据库同步到香港服务器上,仅对部分业务相关表进行同步,而同时又需要把香港服务器上的产品数据同步到美国服务器上,这是同一个数据库,不同表table的双向同步,我在设置过程中,参考了网上的中文文章与网站上的在线文档,多次成败,也算是把mysql的这样同步搞个明白。
而这个二进制日志,如果用作远程数据库恢复,那就是replication了。
这就是使用replication而不用sync的原因。
这也是为什么要设置bin-log =这个选项的原因。
在同步过程中,最重要的同步参照物,就是同步使用那一个二进制日志文件,从那一条记录开始同步。
下面,我们来讲解最核心的过程
上面同步的单词是synchronization,呵呵简写sync,也是linux下一个重要操作
load table from master可以从master数据库把表结构复制到slave数据库中,这样可以建立同步的表。
load data from master是从master数据库把数据导入到slave数据表中,条件是master从一开始安装运行就使用了bin-log参数而保存有二进制日志
4.接下来就是配置master与slave的f文件,使得replcation能有合适的启动参数以支持数据同步
3.2方法之二,使用mysql studio这样的实用工具,直接使用mysql studio的backup database工具把数据库同步
3.3以上两种方法都是master数据库中有不少数据记录,按上两种方法得到master与slave有相同数据库与数据记录。而第三种方法,则是适合于新建数据库的情况,特别适合于master与slave在f已经设置好replication关系(但未指定database同步数据库)的情况:这就是使用mysql的sql语句load table from master与load data from master;
->MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
master-user=backup #同步用户帐号
master-password=1234
master-port=3306
master-connect-retry=60 #预设重试间隔60秒
replicate-do-db=test #告诉slave只做test数据库的更新
bin-log =
5.检查master与slave配置状态,使用show master status;与show slave status;这两个SQL指令即可在master与slave查看配置状态。这里有两个状态变量十分重要
前面我们说过,二进制日志记录着某个数据库所有数据记录变化的sql操作语句,如insert / update / delete等,正是因为如此,在slave同步mysql数据库操作时,其实是读取master中这个mysql-bin.003二进制日志中的sql操作,同在slave中执行这些sql操作,所以,同步成功有以下几个条件
[mysqld]
log-bin =
server-id=1
注意,上面的log-bin =中的等号=是不可少的
在slave的f修改
[mysqld]
server-id=2 #如果有多个slave就改为不重复的id就好,在mysql 4.1中,这个已经取消了
master-host=10.10.10.22
mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File| Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
CHANGE MASTER TO
MASTER_HOST='',
MASTER_USER='replication',
1. master与slave有相同的数据库表结构,最好database name也一样(可以设置为不一样的database name)
2. master与slave有相同的初始数据记录,保证同步操作开始后两者数据一致
3. master必须使用bin-log二进制日志记录(推荐slave也使用bin-log )
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
注意File是mysql-bin.003而position是73
这个文件是对test这个数据库的二进制日志记录,记录数据变化的当前记录条数是73
RESET SLAVE #从机运行,清除日志同步位置标志,并重新生成
虽然重新生成了,但是并不起用,最好,将从机的mysql进程重启一下,
LOAD TABLE tblname FROM MASTER #从机运行,从主机端重读指定的表的数据,每次只能读取一个,受timeout时间限制,需要调整timeout时间。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout和net_write_timeout的值
技巧:如果你使用win2k的mysql那么,你可以下载出的官方mysql administrator实用程序,直接在mysql administrator中即可配置master与slave,同时也可以配置query-cache哟
在master的f (如果是win32那就是my.ini )增加
下面的官方文档,说明如何安装与设置mysql同步操作,当然,英文版
/doc/mysql/en/Replication_HOWTO.html
现在,我们用中文复述一下过程
1.首先,你应该有两个或两个以上的mysql数据库服务器,版本最好是在3.3以上(当然啦,两个服务器不一定是两台机器,一台机器上安装两个mysql服务是可以的,同时,如果你对mysql replication原理十分精通的话,你甚至可以在一个mysql服务的两个不同数据库database之间作同步,看有没有需要了)
2.2 mysql帐号一般在master与slave设置为相同帐号笔窃冻炭煞梦?
2.3特别注意,如果你用linux / unix操作系统,那一定要注意一下防火墙firewall
有没有限制mysql远程访问,如果是,最好是打开远程访问端口,并作好访问ip限制
2.4由于f中要明文存储mysql帐号密码,请注意保护f不让其他用户访问到
(看来要向mysql说明下以后用密码存passwd )
3.第三步,当然是设置两个服务器要同步的数据库为同样的数据库了
这里有一些技巧,包括mysql的sql指令说明下
3.1方法之一,就是英文说明中说的,先锁定数据库读写功能(其实最好是停止mysqld服务,再作备份)然后用tar备份数据库目录,转到slave服务器相同数据目录中
说明:这两个服务器一般设置一个为主服务器,或叫源服务器,master mysql server,另一台或其他多台就是replication slave同步从服务器了。一台slave与多台slave设置方法是一样的,这样你就可以作类似数据库集群了
相关主题