一、什么是主从复制
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库。
二、主从复制的作用
1、做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
2、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。 3、读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。
三、主从复制的原理
1.数据库有个bin-log二进制文件,记录了所有sql语句。
2.我们的目标就是把主数据库的bin-log文件的sql语句复制过来。
3.让其在从数据的relay-log重做日志文件中再执行一次这些sql语句即可。
具体需要三个线程来操作:
1.binlog输出线程:每当有从库连接到主库的时候,主库都会创建一个线程然后发送binlog内容到从库。在从库里,当复制开始的时候,从库就会创建两个线程进行处理:
2.从库I/O线程:当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。
3.从库的SQL线程:从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。
可以知道,对于每一个主从复制的连接,都有三个线程。拥有多个从库的主库为每一个连接到主库的从库创建一个binlog输出线程,每一个从库都有它自己的I/O线程和SQL线程。
四、安装步骤
1.环境
我使用的是阿里云的云服务器,如下:
数据库版本:mysql5.6
2.两个ECS都安装mysql,检查系统是否安装其他版本的MYSQL数据
#yum list installed | grep mysql
3.安装mysql
#wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
#rpm -ivh mysql-community-release-el7-5.noarch.rpm
#yum install mysql-community-server -y
4.启动mysql
# service mysqld start
5.设置mysql开机自启动
#systemctl enable mysqld
6.设置root密码
mysql_secure_installation
运行mysql_secure_installation会执行几个设置:
--为root用户设置密码
--删除匿名账号
--取消root用户远程登录
--删除test库和对test库的访问权限
--刷新授权表使修改生效
通过这几项的设置能够提高mysql库的安全,按照提示选择即可。
7.登陆root账号
# mysql -uroot -pyourpassword
建立远程root用户
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
mysql> flush privileges;
8.配置数据库主从
编辑主节点配置文件,添加启用二进制日志文件
vim /etc/my.cnf
添加:
log-bin = mysql-bin
binlog_format = mixed
server-id =1
innodb-file-per-table =ON
skip_name_resolve=ON
修改配置后,需要重启mysql。
9.进入数据库,查看日志信息,查看二进制日志是否开启
mysql> show global variables like '%log%';
查看主节点二进制日志列表
mysql> show master logs;
查看主节点的server id
mysql> show global variables like '%server%';
主服务器配置完成。
注意:确保主服务器的iptables没有阻断3306的访问端口。
10.配置从服务器
编辑从节点配置文件,开启中继日志
在/etc/my.cnf添加:
relay-log=relay-log
relay-log-index=relay-log.index
server-id=12
innodb_file_per_table=ON
skip_name_resolve=ON
进入mysql,查看从节点日志信息,查看中继日志是否开启:
mysql> show global variables like '%log%';
查看server 相关信息:
mysql> show global variables like '%server%';
在从节点配置访问主节点的参数信息,添加主节点主机,访问主节点的用户名及密码,主节点二进制文件信息。
注意:主节点的二进制文件一定要是二进制列表中的最后一个二进制文件。
mysql> CHANGE MASTER TO MASTER_HOST='yourmasterip',MASTER_USER='root',MASTER_PASSWORD='yourmasterpassword', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=311;
查看从节点的状态信息:
mysql> show slave status\G;
因为没有启动 从节点的复制线程,IO线程 和 SQL 线程都为NO.
启动复制线程START SLAVE 可以指定线程类型:IO_THREAD ,SQL_THREAD, 如果不指定,则两个都启动。然后再次查看从节点状态信息.
此时,主从复制已搭建成功,下面我们进行测试!
五、测试
在主节点创建数据库,并查看主节点二进制日志信息
在从节点查找二进制日志信息,并查看mydb数据库是否复制成功
ok,主从测试成功~这只是简单的主从搭建,自己动手体验下吧.