MySQL主从复制

一、实现原理:
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.登录主服务器上创建库、表、修改数据,然后观察从库是否跟着变动

 

posted @ 2019-01-27 00:46  理舞  阅读(190)  评论(0)    收藏  举报