mysql主从配置步骤
主服务器配置:
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即为正常