MySQL主从实验

来源:互联网 发布:帝国仿内涵吧网源码 编辑:程序博客网 时间:2024/05/29 13:48

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 user@192.168.10.2 identified by “pwd”;

    grant replication slave on *.* user@192.168.10.2 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即为正常