写在前面:
历史总是要前进的,历史从来不等待一切犹豫者、观望者、懈怠者、软弱者;只有与历史同步伐、与时代共命运的人才能赢得光明的未来!
一、MySQL主从复制概述
1.为什么要主从复制?
注意:
MySQL是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失。为了保证MySQL数据库的可靠性。就要会一些提高可靠性的技术。
2.如何解决性能问题?
3.biglog 日志的三种格式
- Statement:每一条会修改数据的sql都会记录在binlog中
- Row: 仅保存哪条记录被修改
- Mixed: 以上两种的混合使用,一般的语句修改用statement,全表更新使用Row,但是无法使用@@host name。
4. 二进制日志管理
(1)二进制日志位置
在my.cnf文件中使用 log-bin = 指定;命名规则为 mysql-bin.000000 (后为6位数字)
mysql> show variables like '%log_bin%' ;
(2) 查看二进制日志格式
mysql> show variables like '%format%';
(3) 查看当前使用的二进制日志文件
mysql> show master status;
二、MySQL主从复制原理
原理:
主从复制的原理则是采用binlog文件进行复制,我们都知道MySQL的数据库会产生一个二进制日志,就是binlog,该日志文件记录了数据的任何修改,所以我们的从机Slave会从主机读取二进制的binlog日志到本机的I/O thread中,然后写入一个Relay log文件中,从机开启一个SQL thread 定时检查Realy log 文件,如果发现有更新立即把更新的内容在本地的数据库上执行。
三、搭建MySQL主从复制(安装日志带时间)
1.安装MySQL数据库
(1)下载YUM库
wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
(2) 安装YUM库
rpm -ivh mysql57-community-release-el7-10.noarch.rpm
(3) 安装MySQL服务,重启mysql
- yum -y install mysql-community-server
- systemctl restart mysqld
(4) 完成安装,重启mysql
systemctl restart mysqld
(5) 日志文件中找出密码
grep "password" /var/log/mysqld.log
(6) 修改密码策略
- set global validate_password_policy=0;
- set global validate_password_policy=LOW;
- set global validate_password_length=6;
(7) 密码策略修改完以后可以修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
(8) 开启远程连接
- use mysql;
- update user set host ="%" where user = "root";
(9) 刷新信息
flush privileges;
2.开启bin-log日志
(1)修改主服务器Master
修改配置文件:vim /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
(2) 修改从服务器slave
修改配置文件:vim /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
3.重启两台服务器的mysql
service mysqld restart
4.在主服务器上建立帐户并授权slave
mysql>GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';
注意:
一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。
5.查询Master的状态
mysql>show master status;
+------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------+-----------+--------------+--------------+
| mysql-bin.000004 | 308 | |
+-----------+----------+--------------+------------------+
1 row in set (0.00 sec)
注意:
执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。
6.配置从服务器Slave
mysql>change master to master_host='192.168.66.101',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=430;
注意:
注意不要断开,308数字前后无单引号。
7.启动从服务器复制功能
mysql>start slave;
8.检查从服务器复制功能状态
show slave status \G;
注意:
Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
9. 主从服务器测试
mysql> create database hi_db;
Query OK, 1 row affected (0.00 sec)
mysql> use hi_db;
Database changed
mysql> create table hi_tb(id int(3),name char(10));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into hi_tb values(001,'baizhan');
Query OK, 1 row affected (0.00 sec)
10.从服务器Mysql查询
mysql>show databases;
mysql>use hi_db
mysql>select * from hi_tb;
四、基于Docker搭建MySQL主从复制
1.首先拉取Docker镜像
docker pull mysql:5.7
2.启动两个容器
#启动Master
docker run -p 3350:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
#启动Slave
docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
注意:
- --name:为容器指定名称,这里是master
- -p:将容器的指定端口映射到主机的指定端口,这里是将容器的3306端口映射到主机的3306端口
- -e:设置环境变量,这里是指定root账号的密码为root
- -d:后台运行容器,并返回容器ID
3. 获取两个容器IP地址
[root@localhost mycat]# docker inspect master
[root@localhost mycat]# docker inspect slave
4.检验是否启动成功
docker ps -a 显示所有的容器,包括未运行的
注意:
是UP状态,表示正在运行中。
5.配置Master
(1) 进入master容器内部
docker exec -it master /bin/bash
(2) 修改mysqld.cnf配置
#切换目录
cd /etc/mysql/mysql.conf.d/mysqld.cnf
#修改配置文件加入
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
注意:
vi my.cnf
对my.cnf进行编辑。此时会报出bash: vi: command not found
,需要我们在docker容器内部自行安装vim。使用apt-get install vim
命令安装vim
如果报错:
Reading package lists... Done Building dependency tree
Reading state information... Done E: Unable to locate package vim
更新apt-get
apt-get update
安装vim
apt-get install vim
(3) 重启mysql服务
service mysql restart
docker start master
(4) 在Master数据库创建数据同步用户
mysql> GRANT replication SLAVE ON *.* TO 'slave' @'%' IDENTIFIED BY '123456';
6.配置Slave
和配置Master(主)一样,在Slave配置文件mysqld.cnf中添加如下配置
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
注意:
配置完成后也需要重启mysql服务和docker容器,操作和配置Master(主)一致。
7.连接接Master(主)和Slave(从)
(1) 在Master进入mysql
show master status;
(2) 在Slave 中进入 mysql
mysql>change master to master_host='172.17.0.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=438;
参数:
- master_host: Master 的IP地址
- master_user: 在 Master 中授权的用于数据同步的用户
- master_password: 同步数据的用户的密码
- master_port: Master 的数据库的端口号
- master_log_file: 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
- master_log_pos: 从哪个 Position 开始读,即上文中提到的 Position 字段的值
- master_connect_retry: 当重新建立主从连接时,如果连接失败,重试的时间间隔,单位是秒,默认是60秒。
(3) 在Slave中开启主从复制
mysql> start slave
(4)在 Slave 的 MySQL 终端执行查看主从同步状态
show slave status \G;
五、Mycat安装以及管理命令详解
1.下载解压Mycat安装包
tar -zxvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar -C /usr/local
2.将MyCat配置到环境变量中
vim /etc/profile
#增加如下配置
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin
3.MyCat常用操作命令
mycat start #启动MyCat
mycat stop #停止MyCat
mycat console #前台运行MyCat带控制台输出
mycat restart #重启MyCat
mycat pause #暂停MyCat
mycat status #查看启动状态
4.使用MySQL命令进行MyCat的连接
Mycat 提供类似数据库的管理监控方式,可以通过MySQL命令行登录管理端口(9066)执行相应的SQL语句进行管理,也可以通过JDBC方式进行远程连接管理。
5.管理端口
9066用于查看MyCat的运行状态
mysql -uroot -p123456 -h 192.168.1.125 -P9066 -DTESTDB
参数:
- -h:后面是主机。 即当前Mycat安装的主机IP地址。
- -u:Mycat server.xml中配置逻辑库的用户。
- -p:Mycat server.xml中配置逻辑库的密码。
- -P:后面是管理端口号。注意P是大写。
- -d:Mycat server.xml中配置逻辑库。
6.数据端口
8066用于进行数据的CRUD操作
mysql -uroot -p123456 -h 192.168.1.125 -P8066 -DTESTDB
7.MyCat的连接用户名相关信息在配置文件/usr/local/mycat/conf/server.xml
中查看编辑
<user name="root">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
</user>
8.Show命令
-- 查看所有的可用命令
show @@help;
-- 查看所有的逻辑数据库
show @@database;
-- 查看所有的数据节点
show @@datanode;
-- 查看所有的数据源
show @@datasource;
六、核心配置文件及目录结构
1.目录结构
说明:
- bin:可执行命令
- conf:配置文件
- lib:存放jar包
- logs:日志信息
- tmlogs:临时日志
- version.txt:版本信息
2.三个配置文件
- schema.xml:定义逻辑库,表、分片节点等内容
- rule.xml:定义分片规则
- server.xml:定义用户以及系统相关变量,如端口等
写在最后:
行笔暂且至此、下期继续!