mysql 数据库同步 (windows)

A机器:

IP = 192.168.1.101

B机器:

IP = 192.168.1.102

 

(1).在A机器中有数据库如下:

 

//数据库A

 

CREATE DATABASE backup_db;

USE backup_db;

CREATE TABLE `backup_table1` (

  `id` int(11) NOT NULL auto_increment,

  `name` varchar(20) character set utf8 NOT NULL,

  `sex` varchar(2) character set utf8 NOT NULL,

  PRIMARY KEY  (`id`)

) 

 

#A机器的my.cnf(或my.ini)中应该配置:

 

server-id=1

log-bin=c:\mysqlback #同步事件的日志记录文件

binlog-do-db=backup_db #提供数据同步服务的数据库

 

(2).在B机器中有数据库如下:

 

//数据库B

CREATE DATABASE backup_db;

USE backup_db;

CREATE TABLE `backup_table` (

  `id` int(11) NOT NULL auto_increment,

  `name` varchar(20) character set utf8 NOT NULL,

  `sex` varchar(2) character set utf8 NOT NULL,

  PRIMARY KEY  (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

注:数据库A和B的数据库结构一定要相同,否则无法构成同步。

 

#B机器的my.cnf(或my.ini)中应该配置:

server-id=2

master-host=192.168.1.101 #主机A的地址

master-user=ym #主机A提供给B的用户,该用户中需要包括数据库backup_db的权限

master-password=ym #访问密码

master-port=3306 #端口,主机的MYSQL端口

master-connect-retry=60 #重试间隔60秒

replicate-do-db=backup_db #同步的数据库

slave-skip-errors=all #出现错误后忽略,如果不加这个,出现任何错误同步进程会终止

 

(3).完成了以上配置之后,将A的mysql数据的权限给B。

A机器:

mysql>GRANT REPLICATION SLAVE ON *.* TO 'ym'@'192.9.1.102' IDENTIFIED BY 'ym';  

(4).重启AB数据库,后:

B机器:

 

mysql>slave start;

查看同步配置情况

A机器:

mysql>show master status;

B机器:

mysql>show slave status;

(5).在A中的backup_db.backup_table表中插入一些数据,

查看B中的backup_db.backup_table表是否同步了数据改动。



thinkphp官方解释:http://doc.thinkphp.cn/manual/distributed_database.html

ThinkPHP内置了分布式数据库的支持,包括主从式数据库的读写分离,但是分布式数据库必须是相同的数据库类型。配置DB_DEPLOY_TYPE 为1 可以采用分布式数据库支持。如果采用分布式数据库,定义数据库配置信息的方式如下:
  1. //在项目配置文件里面定义
  2. return array(
  3.     //分布式数据库配置定义
  4.     'DB_TYPE'   => 'mysql', //分布式数据库类型必须相同
  5.     'DB_HOST'   => '192.168.0.1,192.168.0.2',
  6.     'DB_NAME'   => 'thinkphp', //如果相同可以不用定义多个
  7.     'DB_USER'   => 'user1,user2',
  8.     'DB_PWD'    => 'pwd1,pwd2',
  9.     'DB_PORT'   => '3306',
  10.     'DB_PREFIX' => 'think_',
  11.     //其他配置参数
  12.     // ...
  13. );
连接的数据库个数取决于DB_HOST定义的数量,所以即使是两个相同的IP也需要重复定义,但是其他的参数如果存在相同的可以不用重复定义,例如:
  1. 'DB_PORT'=>'3306,3306'
  1. 'DB_PORT'=>'3306'
等效。
  1. 'DB_USER'=>'user1', 
  2. 'DB_PWD'=>'pwd1', 
  1. 'DB_USER'=>'user1,user1', 
  2. 'DB_PWD'=>'pwd1,pwd1',
等效。

还可以设置分布式数据库的读写是否分离,默认的情况下读写不分离,也就是每台服务器都可以进行读写操作,对于主从式数据库而言,需要设置读写分离,通过下面的设置就可以:
  1. 'DB_RW_SEPARATE'=>true,
在读写分离的情况下,默认 第一个数据库配置是主服务器的配置信息,负责写入数据,如果设置了 DB_MASTER_NUM参数,则可以支持多个主服务器写入。其它的都是从数据库的配置信息,负责读取数据,数量不限制。每次连接从服务器并且进行读取操作的时候,系统会随机进行在从服务器中选择。
CURD操作系统会自动判断当前执行的方法的读操作还是写操作,如果你用的是原生SQL,那么需要注意系统的默认规则:
写操作必须用模型的execute方法,读操作必须用模型的query方法,否则会发生主从读写错乱的情况。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值