数据库主从复制和读写分离

主从复制

一、主从复制的介绍

  MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。

二、主从复制的原理

 MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我在Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。  从库生成两个线程,一个I/O线程,一个SQL线程;  i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中; 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;  SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

三、主从复制服务器配置

主从复制环境配置

服务器准备两台

192.168.196.176(主 mysql)

192.168.196.177(从 mysql)

四、安装步骤:

  1. 先检查系统是否装有mysql

rpm -qa | grep mysql

2、 下载mysql的repo源

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

 报错: -bash: wget: 未找到命令

 安装插件  yum -y install wget

      安装mysql-community-release-el7-5.noarch.rpm包

sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

  3、安装MySQL

sudo yum install mysql-server

    重置MySQL密码

mysql -u root

报错:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

原因:原因是/var/lib/mysql的访问权限问题。

数据库主从复制和读写分离

chown root /var/lib/mysql/

     重启MySQL服务

service mysqld restart

数据库主从复制和读写分离

     接着登陆设置密码

mysql -u root

use mysql;

update user set password=password('root') where user='root';

exit;

数据库主从复制和读写分离

接着继续重启MySQL服务

service mysqld restart

      接着设置Root账户远程连接密码

 mysql -u root -p

      GRANT ALL PRIVILEGES ON *.* TO [email protected]"%" IDENTIFIED BY "root"; 

重启服务器 service mysqld restart

数据库主从复制和读写分离

 

     使用外网工具连接MySQL

关闭防火墙

systemctl stop firewalld.service

数据库主从复制和读写分离

4、服务器节点    192.168.196.176

 

vi /etc/my.cnf  新增以下内容

server_id=176  ###服务器id(一般跟服务器的ip一致)

log-bin=mysql-bin   ###开启日志文件

数据库主从复制和读写分离

重启mysql服务 service mysqld restart

验证是否已经配置成功

show variables like '%server_id%';

能够查询对应配置文件中的server_id 说明已经配置成功

数据库主从复制和读写分离

show master status;

能够看到同步的文件,和行数 说明已经配置成功。

数据库主从复制和读写分离

5、

服务器节点   192.168.196.177

克隆服务器

vi /etc/my.cnf

server_id=177  ###从服务器server_id

log-bin=mysql-bin  ###日志文件同步方式

binlog_do_db=test  ###同步数据库(多个数据库用,相隔)

数据库主从复制和读写分离

 

重启mysql服务 service mysqld restart

验证是否已经配置成功

show variables like '%server_id%';

能够查询对应配置文件中的server_id 说明已经配置成功

数据库主从复制和读写分离

从服务器同步主服务器配置

change master to master_host='192.168.196.175',master_user='root',master_password='root',

         master_log_file='mysql-bin.000001',master_log_pos=120;

数据库主从复制和读写分离

开始同步 

start slave

数据库主从复制和读写分离

检查从服务器复制功能状态

SHOW SLAVE STATUS

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

数据库主从复制和读写分离

解决办法

因为服务器克隆的时候交UUID产生了重复 ,解决办法

 

Cat  /etc/my.cnf

cd /var/lib/mysql

rm -rf auto.cnf

重启服务器即可

service mysqld restart

数据库主从复制和读写分离

另一个错误的解决办法:

数据库主从复制和读写分离

五、主从复制的效果

数据库主从复制和读写分离

在176服务器新建一个test数据库,那么在177服务器也会同步相应的操作。

重启服务器以后,数据库的主从复制效果消失,要重新设立同步的进程。

数据库主从复制和读写分离