一.mysql主从备份(复制)的基本原理
mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
环境
两台centos6.5服务器
master ip: 192.168.44.137
slave ip:192.168.44.139
保证两台服务器数据库状态相同,若都是初始化状态不一致,则先在master上对要进行主从备份的表进行锁表操作(FLUSH TABLES WITH READ LOCK;),导出数据库进行备份。
Master服务器
修改配置文件(为使用事务的InnoDB在复制中最大的持久性和一致性,你应该指定innodb_flush_log_at_trx_commit=1,sync_binlog=1选项)
# vim /etc/my.cnf
[mysqld]
log-bin=/tmp/binlog #开启二进制日志
server-id=1 #服务器唯一ID,可用ip最后一个字段标识
innodb_flush_log_at_trx_commit=1 #每执行完一条COMMIT命令就写一次日志并进行同步
sync_binlog=1 #每经过1次日志写操作就把日志文件写入硬盘一次
重启mysql
# server mysqld resart
新建帐户,并设置replication slave权限
mysql> grant replication slave on *.* to 'salveuser'@'%' identified by 'redhat';
查询master的状态
mysql>show master status\G;
Slave服务器
修改配置文件
# vim /etc/my.cnf
server-id=2
relay_log=/tmp/mysql-relay-bin #relay_log配置中继日志
Tips:当设置MySQL级联复制时,打开slave服务器的二进制日志,并把log-slave-updates设置为1
重启
# server msyqld resart
让slave连接master,并开始重做master二进制日志中的事件。
mysql> change master to
-> master_host='192.168.44.137',
-> master_user='salveuser',
-> master_password='redhat',
-> master_log_file='binlog.000001',
-> master_log_pos=106,
mysql> slave start;
查看master和slave上线程的状态
mysql> show processlist;
查看从服务器状态
mysql> show slave status\G;
Master_host 指的是 主服务器的地址。
Master_user 指的是主服务器上用来复制的用户。 从服务器会用此账号来登录主服务。进行复制。
Master_log_file 就是前面提到的, 主服务器上的日志文件名.
Read_Master_log_pos 就是前面提到的主服务器的日志记录位置, 从服务器根据这两个条件来选择复制的文件和位置。
Slave_IO_Running: 指的就是从服务器上负责读取主服务器的线程工作状态。 从服务器用这个专门的线程链接到主服务器上,并把日志拷贝回来。
Slave_SQL_Running: 指的就是专门执行sql的线程。 它负责把复制回来的Relaylog执行到自己的数据库中。 这两个参数必须都为Yes 才表明复制在正常工作。
从服务器my.cnf 设置read-only,从服务器用户不给super权限,使从服务器不可写