环境要求:mysql
Windows 操做系统sql
须要Mysql 3.23.15之后的版本。数据库
假设数据库A为主机,数据库B为从机(A向B提供同步服务,即B中的数据来自A)windows
A机器:IP=10.10.151.166安全
B机器:IP=10.10.151.156服务器
下面看单向同步的配置步骤:异步
1 在机器A中创建一个新的数据库,sql语句:网站
2 打开A机器的mysql安装目录下的my.ini文件,在文件最后添加:spa
3 在机器B中创建一个和机器A结构相同的数据库,sql语句:操作系统
注:机器A和B的数据库结构必须一致,不然没法构成同步
4 打开B机器的mysql安装目录下的my.ini文件,在文件最后添加:
#这句是为让从服务器有足够的权限从主服务器是哪一个接收二进制日志文件
6 重启机器A和B的mysql数据库,
7 在机器A中test数据库中的backup_table表中插入一些数据,查看机器B中test数据库中的backup_table表应该同步实现了数据的改动。
下面是双向的数据同步配置步骤:
1仍是上面使用的机器A和机器B,这是B是主机,A是从机,保持上面的配置不要改在机器A 的mysql安装目录下的my.ini文件最后添加:
master-host=10.10.151.156 #主机B的地址
master-user=ym #主机B提供给A的用户,该用户中须要包括数据库test的权限
master-password=ym #访问密码
master-port=3306 #端口,主机的MYSQL端口
master-connect-retry=60 #重试间隔60秒当主从服务器链接意外断开时数据库每隔60秒进行一个从新链接
replicate-do-db=test #同步的数据库
在机器B的mysql安装目录下的my.ini文件最后添加
log-bin=c:\mysqlback #启动同步事件的日志记录文件
binlog-do-db=test #提供数据同步服务的数据库
2 机器B的mysql控制台输入:
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO ym@10.10.151.166 IDENTIFIED BY 'ym' ; 3 重启机器A和机器B的mysql数据库 在机器B中test数据库中的backup_table表中插入一些数据,查看机器A中test数据库中的backup_table表应该同步实现了数据的改动。但不会致使循环 注:实现mysql数据库的数据同步,须将俩台windows操做系统的windows防火墙关闭 Mysql 数据同步的原理: Mysql的数据同步,在Mysql官方网站文档上,叫replication字面意思是重做,这个很准确的代表了Mysql数据库操做的实质,是重做一样的操做,以保持主数 据库服务器没事master与从属数据库服务器slave之间的数据保持一致。 从MySQL3.23.15之后,Mysql支持单向的异步复制。也就是说,1台Mysql服务器充当Master(主库),1台或多台Mysql服务器 充当Slaves(从库),数据从 Master向Slaves进行异步复制。注意,这种复制是异步的,有别于Mysql的同步复制实现(这种实现称作Mysql集群,Mysql Cluster)。 当主库有更新的时候,主库会把更新操做的SQL写入二进制日志(Bin log它记录了全部更新了数据或者已经潜在更新了数据的全部语句),并维护一个二进制日志 文件的索引,以便于日志文件轮回(Rotate)。在从库启动异步复制的时候,从库会开启两个I/O线程,其中一个线程链接主库,要求主库把二进制日志的 变化部 分传给从库,并把传回的日志写入本地磁盘。另外一个线程则负责读取本地写入的二进制日志,并在本地执行,以反映出这种变化保证主从数据库之间的数据同步。 较老的版本在复制的时候只启用一个I/O线程,实现这两部分的功能。这种方法是利用了Mysql数据库主(master)和从(slave)异步复制功 能,来实现数据库 之间的同步。 Windows系统中,Mysql安装目录下my.ini文件中: log-bin=c:\mysqlback; 这一句表示数据库的二进制日志文件都存放在C盘根目录下,而且以mysqlback为文件名,以.000001这样的序号为为文件的扩展名,每个 binlog文件默认是 1GB,超过了会自动换到以.000002为文件扩展名的的文件,索引文件mysqlback.index文件记录了全部mysqlback的文件名。当 然也能够删除这些二进制日志 文件: 使用下面的两个命令 PURGE {MASTER | BINARY} LOGS TO 'log_name' //log_name不会被清除,删除这个序号以//前的 PURGE {MASTER | BINARY} LOGS BEFORE 'date' //date不会被清除,删除这个日期之前的 删除以前全部的二进制日志文件,并从新生成新的二进制日志文件后缀从.000001开始。 可是,当若是有一个正在运行的从属服务器,该服务器当前正在读取正在试图删除的日志文件时则该删除语句不会起做用,而是会失败,并伴随一个错误。不过, 若是从属服务器是中止的,而且碰巧清理了其想要读取的日志文件,则从属服务器启动后便不能复制。当从属服务器正在复制时,删除语句能够安全运行,不须要 中止它们。 在完成了主服务器A的my.ini文件的配置以后,重启主服务器A,从如今起对主服务器A数据库的增长、删除和修改操做都会记录在二进制日志文件中(查询 操做不 作记录)。但也能够指定从服务器从哪里开始和主服务器进行同步,在从服务器上执行下面sql操做: 首先输入命令:slave stop; 而后输入: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’; 最后输入命令:slave start; 这里,把上面的recorded_log_file_name改成想从哪一个二进制日志文件开始同步的文件名,而recorded_log_position改成从该文件的第几条记录开始同 步。 先输入slave stop;指令,再输入上述指令,最后输入slave start;指令 当数据同步产生错误时,会在mysql安装目录下生成*.err日志文件,同时同步线程会退出。 purge binary logs to ‘mysql-bin.000003′; PURGE {MASTER | BINARY} LOGS TO 'log_name' PURGE {MASTER | BINARY} LOGS BEFORE 'date' 用于删除列于在指定的日志或日期以前的日志索引中的全部二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。 例如: PURGE MASTER LOGS TO 'mysql-bin.010'; PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00'; 清除3天前的 binlog PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY); BEFORE变量的date自变量能够为'YYYY-MM-DD hh:mm:ss'格式。MASTER和BINARY是同义词。