开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(二):MyCat - 高级 - 读写分离 - 主从复制(一主一从)搭建】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/756/detail/13279
MyCat - 高级 - 读写分离 - 主从复制(一主一从)搭建
内容介绍:
一、MySQL 一主一从搭建
二、验证主从同步
一、MySQL 一主一从搭建
搭建 MySQL 主从复制机制。首先我们需要准备两台服务器,一台作为 MySQL 的master,也就是主节点;另外一台作为 MySQL 的 slave 从节点。我们使用现成的两台服务器,一台是 157,一台是 158。
首先我们需要把 157 清掉,158 这台服务器我们也退出 MySQL 的服务端,全部清理掉,159 关闭掉,一个 157 也把他关了。需要把 157 上面的其他服务像 my cat 这样的服务把它停掉,cd /user/local/mycat,执行 bin 目录下的 mycat stop 指令(bin/mycat stop),停止 MyCat。现在 157、158 这两台服务器都已经有了,这两台服务器上装的都有 MySQL。我们想让 157 作为 MySQL 的主节点,158 作为157 的从节点,接下来我们需要搭建主从复制集群,我们需要进行一些配置。
2、master
(1)在 master 的配置文件(/usr/my.cnf)中,配置如下内容:
#mysql 服务 ID,保证整个集群环境中唯一
server-id=1
#mysql binlog 日志的存储路径和文件名
log-bin=/var/lib/mysql/mysqlbin
#设置 logbin 格式
binlog format=STATEMENT
#是否只读,1 代表只读,0 代表读写
read-only=0
#忽略的数据,指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
binlog-do-db=db01
①首先,需要在 master 节点当中来开启 binlog 日志,然后再去指定 binlog 的格式为 STATMENT,再去指定它并不是只读的,是可以读写的,然后再指定同步的数据库。
②第一步我们需要修改 master 的配置文件,Master 157 她的 MySQL 的配置文件是存放在 user 目录下,在这个 /user/my.cnf 目录下。然后 sql_mode=No_ENGINE_SUBSTITUTION,STRICT_
TRANS_TABLES
在这一行下面需要添加一些配置,我们把上面的配置直接粘贴过来。第一个 sever_id=1 指的是服务 ID,只需要保证主从复制集群中他是唯一的就可以了;第二个是开启 binlog,并且指定 binlog 日志的存储目录;第三个就是 binlog 日志的格式设置为 STATEMENT;第四个是读写,当前数据库既可以读又可以写,接下来指定同步的数据库,同步的数据库我们只同步 db01 就可以了。
(2)执行完毕之后,需要重启 Mysql:service myself restart;
保存完成之后,我们需要重启 Mysql,重新启动 Mysql。当 Mysql 重新启动完成之后,我们还需要创建一个同步的账户。
(3)创建同步数据的账户,并且进行授权操作:
Grant replication slave on*.*to'itcast'@‘192.168.192.158' identified by'itcast';
flush privileges;
①因为 mysql 在进行主从复制的时候,它需要有一个同步账户,slave 需要通过这个同步账户来连接 master,然后读取它的二进制日志,所以我们需要创建一个同步的账户。创建同步账户,它所具有的权限是 replication slave,是作为复制的一个从节点。它的用户名 itcast,密码 itcast,他能够在 192.158 这台主机上来访问,所以我们需要执行这条 grant replication slave on *.* to ‘ itcast ‘@’ 192.168.192.158’ identified by ‘itcast ‘; sql
语句。要执行这条语句,需要先连接 mysql,mysql -u root -p,itcast,然后再去执行这条 sql 语句。执行完毕之后,我们还需要执行一条刷新权限的指令 flush privileges; 这些指令都执行,我们当前这个账号就已经创建好了。
(4)查看 master 状态: show master status;
再执行一条指令 show master status;来查看 master 的状态。粘贴这条指令,show master status 就是来查看这条指令的状态。当前的 binlog 日志读取到 mysqlbin.000001,读取到 413 这个位置,同步的数据库是 db01,到此主节点的配置就已经配置好了。
3.Slave
(1)在 slave 端配置文件中,配置如下内容:
#ymysq 服务端 ID,唯一
server−id=2
#指定 binlog 日志
log-bin=/var/lib/mysql/mysqlbin
#启用中继日志
relay-log=mysql-relay
①接下来配置从节点,打开 158 这台服务器。在从节点上,我们首先还是一样先修改 slave 的配置文件,依然是 /user/my.cnf 这份配置文件。这份配置文件当中,我们配置了三项信息,第一项 sever id 服务的 ID,上面 master 是 1,这里只要不是 1 就可以了;第二个 log bin, 指的是开启 binlog 日志,指定 binlog 日志的存储目录;第三个就是启用 relay log 叫中继日志,要启用中继日志。把配置内容复制一下,打开 vi /user/my.cnf,把配置粘贴过来,保存,重启 MySQL 服务,serve mysql restart。
(2)执行完毕之后,需要重启 Mysql:service mysql restart;
(3)执行如下指令 :
change master to master-host='192.168.192.157', master-user='itcast', master-password='itcast', master-log-file='mysqlbin.000001', master -log-pos=413;
指定当前从库对应的主库的IP地址,用户名,密码,从哪个日志文件开始的那个位置开始同步推送日志。
①MySQL 服务重启完成之后,我们还需要指定当前的主节点是哪个,需要执行这条 change master to master-host='192.168.192.157', master-user='itcast', master-password='itcast', master-log-file='mysqlbin.000001', master -log-pos=413;
指令,这条指令执行的含义就是当前要去指定主节点,主节点是 157,主节点的用户是 itcast,密码也是 itcast,这个用户名和密码就是我们刚才在上面创建的用户名 itcast 和密码 itcast。
②还有一个叫做 Master_log_file,这个 Master_log_file,还有一个叫做 log position,指的就是这两个
一个是 log file,一个是 log position。原因是因为从节点需要从主节点进行数据库同步的,而数据同步是基于二进制日志进行同步的。既然是基于二进制日志同步的,就要指定从哪个日志开始同步,从这个日志文件的哪个位置进行同步,是需要指定的。复制指令并执行
change master to master-host='192.168.192.157', master-user='itcast', master-password='itcast', master-log-file='mysqlbin.000001', master -log-pos=413;
在执行这条 sql 语句的时候,需要看一下 IP 对不对,用户名、密码对不对,以及日志文件是否匹配,位置是否是 413,不是的话需要适当修改。输入 mysql- u root- p,itcast,
执行,
(4)开启同步操作
start slave
show slave status
开启同步只需要执行 start slave,执行 start slave,接下来查看 slave 的状态。通过 show slave status,查看状态,只需要查看里面的两个选项。
我们只需要在 show slave status 这条 sql 语句后面加上“\G;”,这个时候就可以查看到具体的信息。在这个里面,重点看两项信息
一个是 Slave IO Running和 Slave SQL Running,只需要这两项为 yes,就说明我们主从复制已经搭建好了。刚才加了一个 \G,\G 指的是我们可以让横向展示变为纵向展示,这样展示的更加清晰,因为横向一行展示不下,这样就说明主从复制已经搭建好了。搭建好了,需要验证。
二、验证主从同步
1、在主库中创建数据库,创建表,并插入数据;
create database db01;
user db01;
create table user(
id int(11) not null auto increment,
name varchar(50) not null,
sex varchar(1),
primary key(id)
) engine=innodb default charset=utf8;
insert into user(id, name, sex) values(null,'Tom','1');
insert into user(id, name, sex) values(null,'Trigger','0');
insert into user(id, name, sex) values(null,'Dawn','1');
(1)需要在主节点创建一个数据库,创建一张表,插入数据,看一下从节点有没有就可以了。通过 show databases,先来看一下主节点的数据库,有这么多如下图:
接下来看从节点 show databases,从节点的数据库也有这么多如下图:
执行一条语句,创建一个数据库,复制 create database db01,注意这条语句是在 157,也就是主节点当中执行的,主节点一旦执行会创建 db 01 这个数据库,show databases,db01 这个数据库就有了,接下来查看 158 从数据库,也有 db 01。
接下来在这个数据库当中切换 db01 这个数据库,在 157 这个数据库 use db01。在这个数据库当中再来创建一张表,创建 user 这张表,表已经创建好了。
create table user(
Id int(11) not null auto_increment,
name varchar(50) not null,
sex varchar(1),
Primary key(id)
)engine=innodb default charset=utf8;
我们在 158 从数据库切换 db01,接下来 show tables,查看表已经有了。
我们执行这三条 sql 语句插入三条数据
insert into user(id, name, sex) values(null,'Tom','1');
insert into user(id, name, sex) values(null,'Trigger','0');
insert into user(id, name, sex) values(null,'Dawn','1');
三条数据插入之后,执行一个语句 select* from user,三条数据已经插入到主库了,看从库有没有。执行一条语句 select* from user,如果这条语句执行成功,也能查看数据和主库当中的数据完全一致,则说明主重复制就搭建好了。