mysql复制是指将主数据库的ddl和dml操作通过二进制日志传到复制服务器上,然后在复制服务器上将这些日志文件重做,从而使得从服务器和主服务器的数据保持同步!
mysql复制的优点:
如果主服务器上出现了问题可以切换到从服务器上
可以在从服务器上执行查询操作,降低主服务器的访问压力
可以在从服务器上进行备份,以避免备份期间影响主服务器的服务
赋值配置的步骤:
1.确保主从服务器上安装了相同版本的数据库。
2.在主服务器上,设置一个复制使用的帐户,并授予replication slave权限。
eg:grant relication slave on *.* to indentified by password
3.修改主服务器的配置文件my.cnf,开启binlog,并设置server-id的值,并重启服务器
【mysqld】
log-bin =/home/wuxiaoxiao/...
server-id=1
4.在主服务器上,设置读锁定有效,这个操作确保没有数据库操作,以便获得一个一致性的快照:
flush tables with read lock;
5.然后得到主服务器上当前二进制日志名和偏移量。为了在从服务器启动后,从这个点开始进行数据的恢复
show master status
mysql-bin.00003 102
6.备份数据库文件
7.主数据库备份完毕后,可以恢复写操作
unlock tables;
8.将主数据库的一致性备份恢复到从数据库上。
9.修改从数据库中的配置文件my.cnf
[mysqld]
server-id=2
10.使用--skip-slave-start选项启动从数据库
eg:/user/bin/mysqld_safe --skip-slave-start &
11.对从数据库服务器做相应的设置,指定复制使用的用户,主服务器的ip,端口,开始执行复制的文件和位置等
eg:mysql>change master to
>master_host='ip地址'
>master_port='3306'
>master_user='test'
>master_password='ddd'
>master_log_file='mysql-bin.00003'
>master_log_pos=102;
12.在从服务器上启动slave线程:
start slave
13.执行show processlist命令查看连接正确???
14.测试,在主服务器执行插入操作,看看从服务器上是否变化?
日常的管理维护:
1.查看从服务器的状态:
show slave status \G;
Slave_IO_Running:该进程从主服务器上读取binlog,写入从服务器的中继日志中
Slave_SQL_Running:该进程读取并执行中继日志
2.主从服务器同步维护:
由于从服务器的性能问题可能会和主服务器的数据相差较大了!要定期的进行同步:
在主服务器上执行:
flush tables with read lock;
show master status(出现log-bin.00003 974)
在从服务器上:
select master_pos_wait('mysql-bin.00003','974');
这个查询语句会阻塞知道从服务器达到指定的日志文件和偏移量后,返回0,如果返回-1则表示超时退出
在主服务器上:
unlock tables;
3.如果应用中使用了大的blog列或者字符串,那么在从服务器上恢复的时候就会出现‘log event exceeded max_allowed_packet’错误解决如下:
show variables like 'max_allowed_packet';
默认的是1M
set @@global.max_allowed_packet=16777216
设置成16M
4.切换主从服务器:
假设一台主服务器M,两个从服务器s1,s2!当主服务器出现故障的时候,需要将其中的而一个从数据库服务器(s1)切换成主服务器,同时修改另一个从服务器的配置,使之指向新的主服务器,还要通知应用修改主数据库的ip
下面详细介绍切换主从数据库的步骤:
在s1,s2上(从数据库服务器上):
首先:stop slave TO_THREAD;
然后:show processlist \G
直到看到状态has read all relay log表示更新执行完毕
在s1上,执行stop slave停止从服务,然后reset master
在s2上,执行stop slave,然后change master to master_host='s1的ip',最后:start slave
阅读(2142) | 评论(1) | 转发(0) |