一、实现原理:
1、介绍:主从复制就是把一台服务器(主库Master)上的数据的变化“实时”更新到其他服务器(从库Slave)上,使得所有的服务器的数据保持同步。
2、原理:
(1).在主库上把数据更改记录到二进制日志(Binary Log)中(这些记录被称为二进制日志事件)
(2).从库将主库上的日志复制到自己的中继日志(Relay Log)中
(3).从库读取中继日志中的事件,将其重放到从库数据之上
3、优点及适用场景
(1).通过复制实现数据的异地备份
Master(上海) --> Slave(北京)
--> Slave(广州)
(2).提高数据库系统的可用性
当主库出现故障的时候,可以切换到从服务器上进行使用
(3).实现服务器负载均衡
二、配置说明及实例
1.修改主服务器的my.cnf配置文件
log-bin=master-a-bin # 日志文件名称 binlog-format=ROW # 三种选择:row、statement和mixed server-id=1 # 服务器ID binlog-do-db=iotek_test # 需要同步的数据库实例
2.修改从服务器的my.cnf配置
log-bin=master-a-bin # 日志文件名称 binlog-format=ROW # 二进制日志的格式,主从要统一 server-id=2 # 要求各个服务器的这个id必须不一样
实例配置:
centos 6.5 MySQL版本: MySQL COmmunity 5.6 主服务器: 192.168.60.141 从服务器: 192.168.60.139
1.mysql的安装
检查系统是否自带安装MySQL,如果有的话就卸载
yum list installed | grep mysql yum -y remove mysql-libs.x86-64
更新MySQL5.6版本的yum
wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm rpm -ivh mysql-community-release-el6-5.noarch.rpm
查看是否已经有了mysql的安装源
yum repolist all | grep mysql
安装mysql
yum install mysql-community-server
启动mysql服务
service mysqld start
登录(初始密码是没有的)
mysql -uroot -p
设置密码(登录进入mysql后输入的命令)
mysql> use mysql; mysql> update user set password=password('123456') where user='root'; mysql> flush privileges; # 刷新一下 mysql> quit; # 退出
2.主服务器配置
(1)设置给从服务器登录用的帐号(重新使用密码登录进入mysql中)
mysql> grant replication slave on *.* to 'slave_user1'@'192.168.60.139' identified by '123456';
vi /etc/my.cnf
在[mysqld]下方,把需要添加的部分加入进来
log-bin=master-a-bin # 日志文件名称 binlog-format=ROW # 三种选择 server-id=1 # 服务器ID binlog-do-db=iotek_test # 需要同步的数据库实例
(2)从服务器修改my.cnf与上面方式一样
log-bin=master-a-bin # 日志文件名称 binlog-format=ROW # 二进制日志的格式,主从要统一 server-id=2 # 要求各个服务器的这个id必须不一样
3.重启主服务器同步
service mysqld restart
登录mysql
mysql> show master status
重启从服务器
service mysqld restart
修改连接主服务器,其中master_log_file和master_log_pos是主服务器中show master status中的信息
mysql> change master to master_host='192.168.60.141', master_user='slave_user1', master_password='123456', master_log_file='mysql-a-bin.000001', master_log_pos=120; mysql> start slave; mysql> show slave status G;
需要确认输出中的状态是slave_io_running=yes,slave_sql_running=yes,说明从服务器已经连接到主服务器上了
需要在主服务器关闭防火墙,不然从服务器连接不过来,一直处于连接中
service iptables stop # 临时关闭
chkconfig iptables off # 永久关闭
4.登录主服务器上创建库、表、修改数据,然后观察从库是否跟着变动