最好两个mysql一致 如果 不一样可能会报错
Mysql主从复制搭建文档
- 安装Mysql
- 本地首先需要搭建一套mysql,可以使用集成环境。
- 需要单独在搭建mysql,用来做主从复制
- 解压安装包 [mysql-5.6.24-win32.1432006610.zip]
- 配置 mysql环境变量 ( 修改PATH,添加 D:\MysqlServer5.6\bin )
- D:\MysqlServer5.6 目录下新建my.ini 配置文件
[mysqld]
#mysqld 配置
port=3307
basedir=D:\Mysql_Server_5.6.24
datadir=D:\Mysql_Server_5.6.24\data
#日志配置
log-error=D:\MysqlServer5.6\logs\error.log
log=D:\MysqlServer5.6\logs\mysql.log
long_query_time=2
log-slow-queries=D:\MysqlServer5.6\logs\slowquery.log
-
- 使用管理员打开CMD窗口。
跳转到mysql的bin目录:
#安装一个mysql服务
mysqld –install
ps:如果安装过MYSQL服务,可以使用下边命令安装了一个mysql2的服务:
mysqld install mysql2 --defaults-file="c:\wamp\bin\mysql2\mysql5.6.17\my.ini"
--defaults-file参数用来制定配置文件位置防止多个服务冲突
-
- 启动mysql服务。
net start mysql 启动mysql服务
Net stop mysql 停止mysql服务
Windows 添加服务: [ 防止2个mysql服务冲突 ]
sc create mysql2server binPath= "E:\MysqlServer5.6\bin\mysqld.exe" TYPE= "own" start= "auto" TAG= "no" DisplayName= "mysql2server SERVICES"
- 配置Mysql主从复制
- 添加一个mysql主从复制需要的账号
grant 权限 on 数据库对象 to 用户
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.*
TO mysql_backup@'%'
IDENTIFIED BY '123456';
flush privileges;
-
- 配置主服务器
mysql配置文件加入:
server-id=1
log-bin=mysql-bin
server-id:为主服务器A的ID值
log-bin:二进制变更日值
重启master,运行SHOW MASTER STATUS,输出如下:
-
- 配置从服务器
Slave的配置与master类似,你同样需要重启slave的MySQL。如下:
log_bin = mysql-bin
server_id = 2
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1
server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果slave为其它slave的master,必须设置bin_log。在这里,我们开启了二进制日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。
relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处)。
有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改变,这是一种错误的配置。所以,尽量使用read_only,它防止改变数据(除了特殊的线程)。但是,read_only并是很实用,特别是那些需要在slave上创建表的应用。
#链接主库
CHANGE MASTER TO master_host = '127.0.0.1',
master_user = 'mysql_backup',
master_password = '123456',
master_log_file = 'mysql-bin.000001',
master_log_pos = 3696;
#启动从库
Start slave
#停止从库
Stop slave
#查看从库状态
Show slave status
log_bin
设置此参数表示启用binlog功能,并指定路径名称
log_bin_index
设置此参数是指定二进制索引文件的路径与名称
binlog_do_db
此参数表示只记录指定数据库的二进制日志
binlog_ignore_db
此参数表示不记录指定的数据库的二进制日志
max_binlog_cache_size
此参数表示binlog使用的内存最大的尺寸
binlog_cache_size
此参数表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试。
binlog_cache_use:使用二进制日志缓存的事务数量
binlog_cache_disk_use:使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量
max_binlog_size
Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束
sync_binlog
这个参数直接影响mysql的性能和完整性
sync_binlog=0:
当事务提交后,Mysql仅仅是将binlog_cache中的数据写入Binlog文件,但不执行fsync之类的磁盘 同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。
sync_binlog=n,在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,同志文件系统将Binlog文件缓存刷新到磁盘。
Mysql中默认的设置是sync_binlog=0,即不作任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统绷Crash,在文件系统缓存中的所有Binlog信息都会丢失
binlog的删除
binlog的删除可以手工删除或自动删除
自动删除binlog
通过binlog参数(expire_logs_days )来实现mysql自动删除binlog
mysql> show binary logs;
mysql> show variables like 'expire_logs_days';
mysql> set global expire_logs_days=3;
手工删除binlog
mysql> reset master; //删除master的binlog
mysql> reset slave; //删除slave的中继日志
mysql> purge master logs before '2012-03-30 17:20:00'; //删除指定日期以前的日志索引中binlog日志文件
mysql> purge master logs to 'binlog.000002'; //删除指定日志文件的日志索引中binlog日志文件
或者直接用操作系统命令直接删除