开启:bin-log=1,另外注意选择行,列,还是混合模式

1)salve:

[mysqld]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
[mysqld]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin

//设置哪些数据库和表需要同步,多个库和表多写几次

replicate-do-db=info
replicate-do-table=info.tb01
replicate-do-table=info.tb02
replicate-do-db=info
replicate-do-table=info.tb01
replicate-do-table=info.tb02

show slave status;//显示从机的状态 
 show relaylog events in 'anyvapedavide-relay-bin.000018'; //查看从机执行了那些语句 
 show processlist;//查看从机的进程 
 start slave;//从机开始备份 
 stop slave;//当更换用户,或者需要使用change master命令事应先停止 
 reset slave;//重置,实际操作是master.info,relay_log.info 
 reset slave all;//删除所有同步信息 
 
 change master to 
 master_host=’192.168.10.130’, 
 master_user=’rep1’, 
 master_password=’password’, 
 master_log_file=’mysql-bin.000005’, 
 master_port=3306, 
 master_log_pos=261;

2)master:

server-id=1   //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
log-bin=master-bin
log-bin-index=master-bin.index
binlog_format=ROW;//在my.ini记录日志的方式,有三种,我这里用的是row,因为row是和sql语句无关,只和数据的更改有关.
server-id=1   //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
log-bin=master-bin
log-bin-index=master-bin.index
binlog_format=ROW;//在my.ini记录日志的方式,有三种,我这里用的是row,因为row是和sql语句无关,只和数据的更改有关.

insert into mysql.user(host,user,password) values("%","rep1",password("5erte3h7je")); 
 flush privileges; 
 grant replication slave on *.* to rep1@'%' identified by '5erte3h7je'; 
 flush tables with read lock;//当需要和slave数据同步前锁定表 
 unlock tables;//客户机处理完后释放表 
 show master status;//显示主机状态 
 show processlist;//显示进程信息 
 show binary logs ;//显示主机的logbin日志有哪些文件 
 show binlog events in 'ON.000002';//显示binlog中的事件 
ON.000002' from 107 limit 10;//显示binlog中的事件设置读取的位置 
reset master;//重置主机的binlog日志
PURGE MASTER LOGS TO ‘binary-log.xxx’;//删除所有创建时间在binary-log.xxx之前的二进制日志
 3)配置参数,如果是Inodb引擎 
 # 若是 innodb, 且有用 transaction 的話, 需再加入下面两行 
 innodb_flush_log_at_trx_commit=1 
 sync_binlog=1

4)出现错误,停止同步时处理一

stop slave; 
set global sql_slave_skip_counter=n //客户端运行,用来跳过几个事件,只有当同步进程出现错误而停止的时候才可以执行。
start slave;

备注:此方法估计会引起主从不一至,因为线程停止了

5)出现错误,停止同步时处理二

这个方法时买书看到的

STOP SLAVE SQL_THREAD; 
set global sql_slave_skip_counter=n;
 START SLAVE SQL_THREAD;

此方法推荐使用,在网上搜真还不一定搜得到。吐槽该死的baidu,zhengzhisi google,现在除了满天飞广告啥都没有。

申明,此吐槽和oschina无关,如有投诉我将删除上面那句

6)偶尔某些原因需要跳过一些同步语句

set sql_log_bin=0;

....//这里放自己需要执行的sql

set sql_log_bin=1;//执行完后要重启

使用这个参数是需要注意几点:

1>千万不要不假思索的加上 global 修饰符(set global sql_log_bin=0),这样会导致所有在Master数据库上执行的语句都不记录binlog,这肯定不是你想要的结果。

2>会导致Master和Slave数据库数据不一致,要谨慎操作。最好先锁住主表为只读,再操作

7)锁表注意事项:

需要注意个特点,就是 隐式提交的语句。在退出mysql终端的时候都会隐式的执行unlock tables。也就是如果要让表锁定生效就必须一直保持对话。

查看锁表的方法:

SHOW STATUS LIKE '%lock%';
SHOW OPEN TABLES;
SHOW ENGINE INNODB STATUS;
SHOW STATUS LIKE '%lock%';
SHOW OPEN TABLES;
SHOW ENGINE INNODB STATUS;

8)远程连接可能连不上:请禁用bind-address这句话

另外报错

1200 The server is not configured as slave; fix in
1201 Could not initialize master info structure;
1200 The server is not configured as slave; fix in
1201 Could not initialize master info structure;

原因可能仅仅是因为server-id=0或者1,什么原因我不清楚,直接改为或火其它数字就行了

9)主版本高,从版本低出现一异常
Slave can not handle replication events with the checksum that master is configured to log
这个错误一般出现在master5.6,slave在低版本的情况下。这是由于5.6使用了crc32做binlog的checksum。除了把master的设置从crc32改到none
binlog-checksum = none

10)彻底删除mysql

sudo apt-get autoremove --purge mysql-server-5.0
 sudo apt-get remove mysql-server
 sudo apt-get autoremove mysql-server
 sudo apt-get remove mysql-common //这个很重要 清理残留数据

dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P