myql主从复制
与bin-log有关的日志刷新
flushlogs;
此时会多一个最新的bin-log日志
showmaster status;
查看最后一个bin日志
resetmaster;
清空所有的bin-log日志
/usr/local/mysql/bin/mysqlbinlog-–no-defaults mysql-bin.000001
查看binlog日志
mysql备份
mysqldump–uroot –p test –l –F ‘/tmp/test.sql’
-l 读锁
-F 即flashlogs,每备份一次从当前时间点重新开启一次binlog日志
mysql –uroot–p test –v –f < /tmp/test.sql
使用sql文件恢复
-v查看导入的详细信息
-f当中间遇到错误,可以skip过去,继续执行下面的语句
mysqlbinlog--no-defaults mysql-bin.000002 | mysql -uroot -p123456 test
使用binlog恢复
--start-position=”106”
指定恢复binlog日志中end_log_pos位置
--stop-position=”280”
--stop-date=”2012-01-04 21:17:50”
--start-date
主服务器配置
1)登录mysql数据库
2)给从服务器设置授权用户
grant all salve on *.* to [email protected] identified by “pwd”;
或
grant replication slave on *.* [email protected] identified by “pwd”;
3)修改主服务器的 配置文件,开启binlog,并设置server-id的值
log-bin=mysql-bin
server-id=1
4)在主服务器上设置读锁定有效,确保没有数据库操作,以便获得一个一致性的快照
flush tables with read lock;
5)查看主服务器上当前的二进制日志名和偏移量值
show master status;
6)生成备份
方法一、停止服务,压缩并cp数据文件
方法二、mysqldump
7)将读锁解锁
unlock tables;
8)把数据库的一致性备份恢复到从数据库上,把以上的压缩包解压后放到相应目录
mysql从服务器配置
1)修改从数据库的server-id,注意server-id的值必须是唯一的,不能和主数据库的配置相同,如果有多个从服务器,每个从服务器必须有自己唯一的server-id值
开启配置文件中参数
master-host 主服务器ip
master-user 连接主服务器用户名
master-password 用户密码
master-port 连接端口
2)重启msyqld
pkill mysqld
mysql_safe –user=mysql &
3)进入mysql查看是否已经同步
show slave status\G
如果Slave_IO_Running:Yes, Slave_SQL_Running:Yes则说明已经同步
从服务器常用命令
startslave 启动复制线程
stopslave 停止复制线程
showslave status 查看从数据库状态
showmaster logs 查看主数据库bin-log日志
changemaster to 动态改变到主服务器的配置
showprocesslist 查看从服务器运行进程
常见错误
从数据库无法同步:
Show slave status 显示Slave_SQL_Running为No,Seconds_Behind_Master 为null
原因:
a. 程序可能在slave上进行了些操作
b. 也可能是slave机器重启后,事物回滚造成的
解决:
方法一
slave stop;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
slave start;
方法二
mysql>slavestop;
mysql>showmaster status;得到主服务器上当前的二进制日志名和偏移量
mysql>changemaster to
master_host=”192.168.10.1”,
master_user=”user”,
master_password=’pass’,
master_port=3306,
master_log_file=”mysql-bin.000003”,
master_log_pos=98; //制定log_position
mysql>slavestart;
通过showslave status查看Slave_SQL_Running为Yes,Seconds_Bhind_Master为0即为正常