主服务器配置:

1)登陆MySQL数据库

mysql>mysql -uroot -p123

2)给从服务器设置授权用户

mysql>grant all slave on *.* to user1@192.168.10.2 identified by "123";

mysql>grant replication slave on *.* user1@192.168.10.2 identified by "123";

3)修改主数据库服务器的配置文件my.cnf,开 启binlog,并设置server-id的值

log-bin=mysql-bin

server-id=1

4)在主服务器上设置读锁定有效,确保没有数据库操作,以便获得一个一致性的快照

mysql>flush tables with read lock;

mysql>mysqldump test.user -l -F > /tmp/user.sql(推荐这种)

5)查看主服务器上当前的二进制日志名和偏移量值

mysql>show master status;

6)目前主数据库服务器已经停止了更新操作,生成主数据库的备份,备份的方式有两种:

1.cp全部的数据

2.mysqldump备份数据方法

如果主数据库的服务可以停止,那么直接cp数据文件应该是最快的生成快照的方法

7)主数据库备份完毕后,主数据库可以恢复写操作,剩下的操作只需要在从服务器上去执行

mysql>unlock tables;

8)把主数据库的一致性备份恢复到从数据库上,把以上的压缩包解压后放到相应的目录即可。

 

从服务器配置:

1)修改从数据库的server-id,注意server-id的值必须是唯一的,不能和主数据库的配置相同,如果有多个从服务器,每个从服务器必须有自己唯一的server-id值。

连接主服务器:

(1)在从服务器上的配置文件中:

server-id=2

master-host=192.168.10.1

master-user=user1

master-password=123

master-port=3306

log-bin=mysql-bin

#replicate-do-db=test

#replicate-do-table=test.t1

(2)重新启动MySQLd服务:

pkill mysqld

/usr/local/mysql/bin/mysqld_safe --user=mysql &

(3)查看相应的主从复制进程列表有两种:

1.processlist

mysql>show processlist \G;

如果出现:

state:waiting for master to send event

//连接主数据库为成功,而且成功获取bin-log

state:has read all ready log;waiting for the slave i/o thread to update it

//成功执行bin-log日志,正在等待着去再次连接主数据库并更新获取bin-log日志

 

2.status

mysql>show slave status\G;

如出现:

slave_IO_running:YES

//此进程负责从服务器从主服务器上读取binlog日志,并写入从服务器上的中继日志中。

slave_SQL_running:YES

//此进程负责读取并且执行中继日志中的binlog日志,

#注以上两个都为YES则表明成功,只要其中一个进程的状态是no,则表示复制进程停止,错误原因可以从“last_error”字段的值中看到。

 

(4)从数据库常用命令:

1.start slave

#启动复制进程

2.stop slave

#停止复制进程

3.show slave status

#查看从数据库状态

4.show master logs

#查看主数据库bin-log日志

5.change master to

#动态改变主服务器的配置

6.show processlist

#查看从数据库运行进程

 

MySQL常见错误

从数据库无法同步:

show slave status显示slave_SQL_running为

No,Seconds_Behind_Master为null

原因:

a.程序可能在slave上进行了写操作

b.也可能是slave机器重启后,事务回滚造成的

解决:方法一

mysql>slave stop;

mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql>slave start;

 

解决:方法二

slave库,mysql>slave stop;--停掉slave服务

master库,mysql>show master status;

得到主服务器上当前的二进制日志名和偏移量

 

查看状态,然后到slave服务器上执行手动同步

mysql>change master to

master_host="192.168.10.1",

master_user="user1",

master_password='123',

master_port=3306,

master_log_file="mysql-bin.0000003",

master_log_pos=98;

启动slave服务,

mysql>slave start;

通过show slave status查看slave_SQL_running为

YES,Seconds_Behind_Master为0即为正常