Mysql主从复制(同步原理及搭建过程)
一个网站,最重要的就是它上边的数据,但是当有一天数据库挂掉了,将影响整个网站的正常运行,mysql的主从复制能够很好的解决这个问题,mysql主从复制就是,将一个主数据库服务器(Master)的数据同步到另一个备用数据库服务器(Slave)上,当正在使用的数据库服务器因故障当机时,我们可以把网站数据指向另一个拥有同样数据的数据库服务器上,快速的恢复网站数据。
一.Mysql主从复制原理:
在master上开启log-bin日志功能,记录数据库的操作信息,包括更新,插入,删除等。
主从复制用三个线程实现,即Master上的IO线程,Slave上的IO线程和SQL线程。
Slave上的IO线程连接Master,Master通过自己的IO线程检测到有Slave发来的请求,请求log-bin日志。
Master将log-bin日志返回给Slave,Slave将日志下载到本地的realy_log里面写入一个master-info日志记录同步的pos点。
Slave的SQL线程检测到realy-log日志有更新,然后在本地执行新增的操作信息。
注:主从同步为异步同步方式,Master上数据更新后Slave上才会更新同步数据。
二.Mysql主从配置:
Master配置:
vi /etc/my.cnf修改字段
[mysqld]
datadir=/var/lib/mysql #数据目录
socket=/var/lib/mysql/mysql.sock
user=mysql #用户名
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-bin=mysql-bin #开启log-bin功能
server-id = 1 #设置server-id,Master上server-id设置的数字优先级要高于Slave
auto_increment_offset=1
auto_increment_increment=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
replicate-do-db=all #需要同步的数据库,多个用逗号隔开,这里all为所有数据库
2.Slave配置:
vi /etc/my.cnf修改字段
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
server-id = 2
auto_increment_offset=2
auto_increment_increment=2
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
replicate-do-db=all
3.在Master的mysql中为Slave的同步授权:
mysql> grant replication slave on *.* to ‘tongbu‘@‘192.168.1.103‘ identified by "liupengfang";
4.在Master上查询master状态:
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 272 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
记录mysql-bin点和Position点。
5.在Slave上指定master:
mysql> change master to master_host=‘192.168.1.102‘,master_user=‘tongbu‘,master_password=‘liupengfang‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=272;
6.Slave上启动slave:
mysql> start slave;
7.查看主从同步状态:
mysql> show slave status \G
如果如下两个字段状态都为YES,则主从同步建立完成。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
三.测试:
1.在Master上数据库创建一个数据库并查看master状态:
mysql> create database tomcat charset=utf8;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 572 | | |
+------------------+----------+--------------+------------------+
Position 的点发生变化
2.在Slave上查看是否有该数据库并查看master状态:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
| tomcat |
+--------------------+
可见Slave上已经把Master上数据同步到本地。
本文出自 “IT网络” 博客,请务必保留此出处http://lpf1015.blog.51cto.com/6627801/1660657
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。