mysql主从同步注意事项

master配置

#/etc/my.cnf    
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
default-character-set = utf8
old_passwords=0

#master conf start
server-id=1
expire_logs_days=8
log-bin=mysql-bin

replicate-do-db=dbname1
replicate-do-db=dbname2

slave配置

#/etc/my.cnf 
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0

#slave conf start
server-id=2
master-host=ip
master-user=user
master-password=pwd
master-port=3306
expire_logs_days=8

replicate-do-db=dbname1
replicate-do-db=dbname2


主从实现过程:
MySQL同步功能由3个线程(master上1个,slave上2个)来实现
1:slave创建一个IO_THREAD连接到master,请求master发送二进制日志
2:master创建Binlog Dump线程(可以通过SHOW PROCESSLIST查看线程)发送日志内容到slave的IO_THREAD
3:slave上IO_THREAD读取master的Binlog Dump线程发送的语句,存储在中继日志(relay logs)中
4:slave上启动SQL_THREAD,读取中继日志,执行SQL完成数据同步


注意:
1.在MySQL4.0.2以前,同步只需2个线程(master和slave各一个),即slave不使用中继日志
2.如果有多个slave,master需要为每个slave连接都创建一个线程,而每个slave始终只有2个线程


=============================================================================================


注意事项:
1:主从mysql版本要一致
2:启用同步前,要保证主从数据一致
3:把master上的数据拷贝过来的方法之一实在slave上执行如下命令
mysql>LOAD DATA FROM MASTER
LOAD DATA FROM MASTER命令的一些限制:
A.MySQL版本>=4.0.0
B.仅支持MyISAM类型表
C.slave用户必须有SUPER权限
D.master复制用户必须具备RELOAD和SUPER权限
E.LOAD数据时,将在master上将使用全局读锁
F.建议数据比较少或者master允许长时间读锁时才使用
4:双机互备则是两个mysql同时配置为master及slave
5:为了防止binlog日志撑爆服务器,建议配置binlog过期自动删除
使用命令配置
mysql>set global expire_logs_days=8;
使用配置文件my.cnf
expire_logs_days = 8
查看配置结果
mysql>show variables like 'expire_logs_days';


=============================================================================================


主服务器上的相关命令:
mysql>show master status\G
mysql>show master status;
mysql>show slave hosts;
mysql>show logs;
mysql>show binlog events;
mysql>show binary logs;
mysql>purge logs to 'log_name';
mysql>purge logs before 'date';
mysql>reset master; //老版本为 flush master
mysql>set sql_log_bin=/xxx;


从服务器上的相关命令:
mysql>slave start;
mysql>slave stop;
mysql>SLAVE STOP IO_THREAD; //此线程把master段的日志写到本地
mysql>SLAVE start IO_THREAD;
mysql>SLAVE STOP SQL_THREAD; //此线程把写到本地的日志应用于数据库
mysql>SLAVE start SQL_THREAD;
mysql>reset slave;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER;
mysql>load data from master;
mysql>show slave status; //SUPER,REPLICATION CLIENT
mysql>CHANGE MASTER TO MASTER_HOST=127.0.0.1, MASTER_PORT=3306,MASTER_USER=user, MASTER_PASSWORD=pwd; //动态改变master信息
mysql>PURGE MASTER [before 'date']; 删除master端已同步过的日志
mysql>purge binary logs to 'ablelee.000003'; //删除ablelee.000003之前的binlog,不包含ablelee.000003
mysql>PURGE MASTER LOGS TO 'mysql-bin.010';
mysql>PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00';


PURGE命令语法
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'

你可能感兴趣的:(DB-mysql)