开启:bin-log=1,另外注意选择行,列,还是混合模式
1)salve:
[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
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语句无关,只和数据的更改有关.
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中的事件
show binlog events in ' 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;
8)远程连接可能连不上:请禁用bind-address这句话
另外报错
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