一、Mysql主从复制的原理
mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
二.mysql主从备份配置方法
在进行mysql主从备份时,最好确保主从服务器的版本兼容。从服务器至少与主服务器版本相同或更高。
主机(master)配置:
1.修改mysql配置文件my.cnf
在[mysqld]标签下添加以下几行
log-bin #开启二进制日志
server-id=id #主服务器id号
binlog-do-db=db_nameA #指定对db_nameA记录二进制日志
binlog-ignore-db=db_namB #指定不对db_namB记录二进制日志
注意:
log-bin,server-id是配置文件中必须添加的内容。此时主服务器默认对所有数据库进行备份。如果需要特殊指明只对某个数据库进行备份或不备份,则可以加入binlog-do-db和binlog-ignore-db选项。有关(log-bin的详细说明见附录1)
在测试主机上,我们实际添加入如下内容:
log-bin
server-id=1
binlog-do-db=test
2.为从服务器添加mysql账户并配置权限
在主服务器上,必须为从服务器创建一个用来连接主服务器的用户,并设置replication slave权限。所用具体命令如下:
grant replication slave
on *.*
to '帐号' @ '从服务器IP' identified by '密码';
在测试机上,我们实际执行:
grant replication slave
on *.*
to 'replication'@'%' identified by 'sosotest';
这时在mysql库的user表中使用
select * from user where user = 'replication' \G;
可以看到Repl_slave_priv项对就的值为Y。
3.导出主服务器数据
导出主服务器数据,以备之后将其导入从服务器,使主从服务器的初始状态保持一致。
mysqldump test > test.bak
4.记录File 及Position 项的值
重启mysql,使用show master status\G;查看主服务器状态,记录File 及Position 项的值,以便之后对从服务器进行配置。在测试机上,我们实际执行时看到的结果如下:
*************************** 1. row ***************************
File: simba-bin.000008
Position: 79
Binlog_Do_DB: test
Binlog_Ignore_DB:
1 row in set (0.00 sec)
其中File为imba-bin.000008;Position为79。
至此主服务器配置完毕
从机(slave)配置:
1.修改mysql配置文件my.cnf
在[mysqld]标签下添加以下面一行:
server-id=id #从机id
实际中,我们添加:
server-id=2
3.重启mysql数据库并设置相关参数
change master to
master_host = '10.1.146.133',
master_user = 'replication',
master_password = 'sosotest',
master_log_file = 'darkstar-bin.000008',
master_log_pos = 79;
slave start;
4.检查数据库查看相关参数
使用show slave status \G;查看相关参数是否正确。
在实际执行时,我们在从机上看到的结果如下(只摘取了部分输出):
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.1.146.133
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: darkstar-bin.000006
Read_Master_Log_Pos: 79
Relay_Log_File: simba-relay-bin.000003
Relay_Log_Pos: 171
Relay_Master_Log_File: darkstar-bin.000006
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
……
对部分参数的解释:
Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上参数说听slave正常运行,正等待主服务器发来的消息。此时若用netstate命令可以看到从机与主机间已经建立了一条边接。