目录

一、简述DDL,DML,DCL,DQL,并且说明mysql各个关键字查询时候的先后顺序

二、自行设计10个sql查询语句,需要用到关键字[GROUP BY/HAVING/ORDER BY/LIMIT],至少同时用到两个

三、xtrabackup备份和还原数据库练习

四、实现mysql主从复制

五、 用mycat实现mysql的读写分离

六、实现openvpn部署,并且测试通过,输出博客或者自己的文档存档


一、简述DDL,DML,DCL,DQL,并且说明mysql各个关键字查询时候的先后顺序

DDL(data defination language):数据库定义语言

概念:数据库定义语言主要是建表、删表、修改表字段等操作

关键字:create, drop,alter 等

操作数据库:CRUD

C(Create):创建

  • 创建数据库:

    • create database 数据库名称;
  • 创建数据库,判断不存在,再创建:
    • create database if not exists 数据库名称;
  • 创建数据库,并指定字符集
    • create database 数据库名称 character set 字符集名;

对数据库进行操作:

1.创建表

-- 通过 create table 表名(字段名 字段类型 ...)可以创建表
-- comment 注释 可以对字段加注释也可以对表加注释
CREATE TABLE emp(
id INT COMMENT '编号',
workno VARCHAR(10) COMMENT '工号',
NAME VARCHAR(10) COMMENT '姓名',
gender CHAR(1) COMMENT '性别',
age TINYINT UNSIGNED COMMENT '年龄',
idcard CHAR(18) COMMENT '身份证号',
workaddress VARCHAR(50) COMMENT '工作地址',
entrydate  DATE COMMENT '入职时间'
)COMMENT '员工表'

2.修改表

 -- 通过 alter table 表名 add 字段名 字段类型 可以为表添加新字段
ALTER TABLE emp ADD nickname VARCHAR(20) COMMENT '昵称'-- 通过 alter table 表名 modify 字段名 字段类型(长度)
-- 可以修改已创建的表指定字段类型
ALTER TABLE emp MODIFY age INT (10) -- 通过 alter table emp change 旧字段名 新字段名 字段类型(长度)
-- 可以修改已创建表的字段名和字段类型
ALTER TABLE emp CHANGE age ages TINYINT(3) -- 通过alter table 表名 drop 字段名 可以删除表中已有字段
ALTER TABLE emp DROP workno-- 通过 alter table 表名 rename to 新表名 可以更改已存在表的名称
ALTER TABLE emp RENAME TO employee

3.删除表

--DROP 表名
-- 通过 drop table if exist 表名可以删除已存在的表
DROP TABLE IF EXISTS emp

DML(data manipulation language):数据库操作语言

概念:是一种对数据库中表数据进行操作的语言,它主要包括添加、修改、删除

关键字:insert, delete, update 等

DML:增删改表中数据

添加数据

  • 语法:

    • insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
  • 注意:
    1. 列名和值要一一对应。
    2. 如果表名后,不定义列名,则默认给所有列添加值
      insert into 表名 values(值1,值2,...值n);
    3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来

删除数据

  • 语法:

    • delete from 表名 [where 条件]
  • 注意:
    1. 如果不加条件,则删除表中所有记录。
    2. 如果要删除所有记录
      1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
      2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。

修改数据

  • 语法:

    • update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
  • 注意:

    如果不加任何条件,则会将表中所有记录全部修改。

对表数据进行操作:

1.添加数据

-- 通过 insert into 表名(字段名1,字段名2...)values(值1,值2,...)
--可以对数据库添加一条数据
INSERT INTO emp (id,workno,NAME,gender,age,idcard,workaddress,entrydate) VALUES(1,1,'ll','男',18,123456789987654321,'中国','2022-01-02')-- 通过 insert into 表名 values(值1,值2,值3...)
-- 可以添加全部字段的值
INSERT INTO emp VALUES(1,11,'ee','女',19,1234569874561237,'西安','2022-03-04')-- 通过  insert into 表名(字段名1,字段名2...) values(值1,值2,...),(值1,值2,...),(值1,值2,...)...
-- 可以批量添加数据
INSERT INTO emp (id,workno,NAME,gender,age,idcard,workaddress,entrydate)
VALUES(1,1,'qq','男',16,123456789987654321,'中国','2022-02-03'),(1,1,'qq','男',16,123456789987654321,'中国','2022-02-03'),
(1,1,'qq','男',16,123456789987654321,'中国','2022-02-03'),(2,1,'qq','男',16,123456789987654321,'中国','2022-02-03'),
(3,1,'qq','男',16,123456789987654321,'中国','2022-02-03'),(4,1,'qq','男',16,123456789987654321,'中国','2022-02-03'),

2.修改数据

--警告,修改单条数据时记得加上where条件,否则会修改表所有记录

-- 通过 update 表名 set 字段名=值 where 字段名
-- 可以将表中特定的一条数据的某一字段的值修改为目标值
UPDATE emp SET NAME='itheima' WHERE id=2

3.删除数据

--警告,删除单条数据时记得加上where条件,否则会删除表所有记录

-- 通过 delete from 表名 where 条件
-- 可以将表中特定的数据删除
DELETE FROM emp WHERE gender='女'--警告,删除单条数据时记得加上where条件,否则会删除表所有记录

DCL(data control language):数据库控制语言

概念:普通查询及简单条件查询

关键字:GRANT, REVOKE 等

1.普通查询 

/*
select 字段列表  from 表名 where 条件列表
group by 分组字段 having 分组条件
order by 排序字段 (asc 升序,desc降序)
limit 分页参数
*/
SELECT * FROM emp -- 查询emp 表中全部数据SELECT NAME ,workno,age FROM emp -- 查询emp 中的name 和workno信息SELECT workaddress AS '工作地址' FROM emp -- 字段名 as '内容' 可以给字段取别名SELECT DISTINCT workaddress '工作地址' FROM emp -- distinct 不显示重复的字段内容(去重)/*
between ... and 在该范围内 包含两侧值
in(值1,值2,值3) 多选一,有一个条件满足就显示
like 占位符 分为(_匹配单个字符,%匹配任意字符)
is null 是null
and 和 && 并且表示两个条件都要满足
or 或|| 多个条件任意一个成立
not 或 !非,不是
*/SELECT * FROM emp WHERE idcard IS NULL -- 查询出emp表中idcard是null的数据信息SELECT * FROM emp WHERE idcard IS NOT NULL -- 查询出emp表中idcard不是null的数据信息-- 查询出age大于等于15小于等于20 的三种方法
SELECT * FROM emp WHERE age>=15 && age<=20SELECT * FROM emp WHERE age>=15 AND age<=20SELECT * FROM emp WHERE age BETWEEN 15 AND 20-- 查询出age=18,age=20,age=40 的数据信息 的两种方法
SELECT * FROM emp WHERE age=18 OR age=20 OR age=40SELECT * FROM emp WHERE age IN(18,20,40)-- 模糊查询姓名为两个字符的数据信息
SELECT * FROM emp WHERE NAME LIKE '__'-- 模糊查询 身份证号以x 结尾的数据信息
SELECT * FROM emp WHERE idcard LIKE '%x'

 2.复杂条件查询

在进行分组查询时需要注意:
1.group by … having中having后接的是分组后的条件筛选,where后接的是分组前的条件筛选
2.在SQL语句同时有 group by 、order by、limit时,编写顺序是先分组(group by)再排序(order by )最后分页(limit)

where和having区别:
1.where 不能用聚合函数,而having可以
2.条件筛选时不满足 where 条件不能进行分组
3.两者顺序是先where后having

/*
count 统计数量 min最小值 max最大值 avg 平均值 sum 求和
*/
-- 求在西安工作的人的年龄总和
SELECT SUM(age) FROM emp WHERE workaddress='西安'-- 按照性别分组,求男女性别的人数分别是多少
SELECT  gender,COUNT(*) FROM emp GROUP BY gender -- 按照性别分组,求男女两种性别的平均年龄是多少
SELECT gender,AVG(age) FROM emp GROUP BY gender-- 按照工作地址分组,查询在同一工作地址上工作人数大于3人并且工作人员年龄小于45
SELECT  workaddress,COUNT(*) FROM emp WHERE age<45 GROUP BY workaddress HAVING COUNT(*)>3-- 按照年龄进行升序排序
SELECT * FROM emp ORDER BY age ASC-- 按照入职时间进行降序排序
SELECT * FROM emp ORDER BY entrydate DESC-- 将emp表中数据进行分页,并显示第二页信息
SELECT * FROM emp LIMIT 1,10-- 按照年龄升序排序,相同年龄的按照入职时间降序排序
SELECT * FROM emp ORDER BY age ASC ,entrydate DESC

DQL(data query language):数据库查询语言

概念:主要是用来管理数据库用户,控制数据库使用权限的

关键字:select, where 等

1.用户管理

-- 创建用户itcast 可以在本机使用,密码是123456
CREATE USER 'itcast'@'localhost' IDENTIFIED BY '123456'-- 创建用户 任意主机都可以访问
CREATE USER 'itheima'@'%' IDENTIFIED BY '123456'-- 修改密码
ALTER USER 'itheima'@'%' IDENTIFIED WITH mysql_native_password BY '1234'-- 删除用户
DROP USER 'itheima'@'%'

 2.数据库授权控制

/*
all,allprivleges 所有权限   select 查询数据   insert 插入数据
update 修改数据   delete 删除数据 alter修改表权限  drop 删除数据库/表/视图  create 创建数据库/表
*/-- 查询某一个用户的权限
SHOW GRANTS FOR '用户名'@ '主机名'-- 给某一个用户添加权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'-- 撤销某一个用户的权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名'

二、自行设计10个sql查询语句,需要用到关键字[GROUP BY/HAVING/ORDER BY/LIMIT],至少同时用到两个

 完成sql语句查询前,我们提前创建好了两张表,员工表(employee )和部门表(dept)

查询员工表(employee) 表

select * from employee;

mysql> select * from employee;
+------+--------+----------+---------+----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job | e_salary | hiredate |
+------+--------+----------+---------+----------+----------+------------+
| 1001 | SMITH | m | 20 | CLERK | 800 | 2005-11-12 |
| 1002 | ALLEN | f | 30 | SALESMAN | 1600 | 2003-05-12 |
| 1003 | WARD | f | 30 | SALESMAN | 1250 | 2003-05-12 |
| 1004 | JONES | m | 20 | MANAGER | 2975 | 1998-05-18 |
| 1005 | MARTIN | m | 30 | SALESMAN | 1250 | 2001-06-12 |
| 1006 | BLAKE | f | 30 | MANAGER | 2850 | 1997-02-15 |
| 1007 | CLARK | m | 10 | MANAGER | 2450 | 2002-09-12 |
| 1008 | scorr | m | 20 | ANALYST | 3000 | 2003-05-12 |
| 1009 | KING | E | 10 | PRES | 5000 | 1995-01-01 |
| 1010 | TURNER | f | 30 | SALESMAN | 1500 | 1997-10-12 |
| 1011 | ADAMS | m | 20 | CLERK | 1100 | 1999-10-05 |
| 1012 | JAMES | m | 30 | CLERK | 950 | 2008-06-15 |
| 1013 | Mofan | M | 30 | CLERK | 1000 | 2022-06-10 |
+------+--------+----------+---------+----------+----------+------------+

查询部门表(dept)

select * from dept;

mysql> select * from dept;
+------+------------+------------+
| d_no | d_name     | d_location |
+------+------------+------------+
|   10 | ACCOUNTING | ShangHai   |
|   20 | RESEARCH   | BeiJing    |
|   30 | SALES      | ShenZhen   |
|   40 | OPERATIONS | FuJian     |
+------+------------+------------+
4 rows in set (0.02 sec)

查询条件如下:

多表查询,显示雇员名,雇员工资,部门
查询工资比部门30号的所有员工的工资高的员工的姓名,工资,部门号
如何查询和部门10的工作相同的雇员姓名、工作、工资、部门号,但是不含10号部门自己的雇员
查询每个员工所在部门,显示员工姓名和部门名?
要求查询员工的部门名称
要求查询员工姓名及部门名称
查询工作为'MANAGER'和'SALESMAN' 的信息
按照薪资排序,取出排名在前5名的员工
按照薪资降序,取出排名从第3名员工开始,长度为4的信息
如何显示与SMITH同一部门的所有员工

1.多表查询,显示雇员名,雇员工资,部门 

1.多表查询,显示雇员名,雇员工资,部门mysql> select e_name,e_salary,d_name from  employee,dept-> where employee.dept_no = dept.d_no;
+--------+----------+------------+
| e_name | e_salary | d_name     |
+--------+----------+------------+
| CLARK  |     2450 | ACCOUNTING |
| KING   |     5000 | ACCOUNTING |
| SMITH  |      800 | RESEARCH   |
| JONES  |     2975 | RESEARCH   |
| scorr  |     3000 | RESEARCH   |
| ADAMS  |     1100 | RESEARCH   |
| ALLEN  |     1600 | SALES      |
| WARD   |     1250 | SALES      |
| MARTIN |     1250 | SALES      |
| BLAKE  |     2850 | SALES      |
| TURNER |     1500 | SALES      |
| JAMES  |      950 | SALES      |
| Mofan  |     1000 | SALES      |
+--------+----------+------------+
13 rows in set (0.00 sec)

2.查询工资比部门30号的所有员工的工资高的员工的姓名,工资,部门号

1.mysql> select e_name,e_salary,dept_no-> from employee-> where e_salary > all(-> select e_salary-> from employee-> where dept_no = 30);
+--------+----------+---------+
| e_name | e_salary | dept_no |
+--------+----------+---------+
| JONES  |     2975 |      20 |
| scorr  |     3000 |      20 |
| KING   |     5000 |      10 |
+--------+----------+---------+
3 rows in set (0.01 sec)

 3.如何查询和部门10的工作相同的雇员姓名、工作、工资、部门号,但是不含10号部门自己的雇员

mysql> select e_name,e_job,e_salary,dept_no from employeewhere e_job in (select distinct e_jobfrom employeewhere dept_no = 10) and dept_no != 10;
+--------+---------+----------+---------+
| e_name | e_job   | e_salary | dept_no |
+--------+---------+----------+---------+
| JONES  | MANAGER |     2975 |      20 |
| BLAKE  | MANAGER |     2850 |      30 |
+--------+---------+----------+---------+
2 rows in set (0.01 sec)

 4.查询每个员工所在部门,显示员工姓名和部门名?

mysql> select e_name,e_job,d_name from employee,deptwhere employee.dept_no = dept.d_no;
+--------+------------+------------+
| e_name | e_job      | d_name     |
+--------+------------+------------+
| CLARK  | MANAGER    | ACCOUNTING |
| KING   | PRES工DENT | ACCOUNTING |
| SMITH  | CLERK      | RESEARCH   |
| JONES  | MANAGER    | RESEARCH   |
| scorr  | ANALYST    | RESEARCH   |
| ADAMS  | CLERK      | RESEARCH   |
| ALLEN  | SALESMAN   | SALES      |
| WARD   | SALESMAN   | SALES      |
| MARTIN | SALESMAN   | SALES      |
| BLAKE  | MANAGER    | SALES      |
| TURNER | SALESMAN   | SALES      |
| JAMES  | CLERK      | SALES      |
+--------+------------+------------+
12 rows in set (0.01 sec)

 5.要求查询员工的部门名称

mysql> selecte_name as '员工姓名',d_name as '部门名' //起别名fromemployee join deptonemployee.dept_no = dept.d_no;  //员工的部门编号等于部门的编号。
+----------+------------+
| 员工姓名 | 部门名     |
+----------+------------+
| CLARK    | ACCOUNTING |
| KING     | ACCOUNTING |
| SMITH    | RESEARCH   |
| JONES    | RESEARCH   |
| scorr    | RESEARCH   |
| ADAMS    | RESEARCH   |
| ALLEN    | SALES      |
| WARD     | SALES      |
| MARTIN   | SALES      |
| BLAKE    | SALES      |
| TURNER   | SALES      |
| JAMES    | SALES      |
+----------+------------+
12 rows in set (0.00 sec)

 6.要求查询员工姓名及部门名称

mysql> selecte_name as '员工姓名',d_name as '部门名'fromemployee e right outer join dept d  //outer可以省略one.dept_no = d.d_no;
+----------+------------+
| 员工姓名 | 部门名     |
+----------+------------+
| CLARK    | ACCOUNTING |
| KING     | ACCOUNTING |
| SMITH    | RESEARCH   |
| JONES    | RESEARCH   |
| scorr    | RESEARCH   |
| ADAMS    | RESEARCH   |
| ALLEN    | SALES      |
| WARD     | SALES      |
| MARTIN   | SALES      |
| BLAKE    | SALES      |
| TURNER   | SALES      |
| JAMES    | SALES      |
| NULL     | OPERATIONS |
+----------+------------+
13 rows in set (0.00 sec)

 7.查询工作为'MANAGER'和'SALESMAN' 的信息

mysql> select * from employee-> where e_job = 'MANAGER' or e_job = 'SALESMAN';
+------+--------+----------+---------+----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job    | e_salary | hiredate   |
+------+--------+----------+---------+----------+----------+------------+
| 1002 | ALLEN  | f        |      30 | SALESMAN |     1600 | 2003-05-12 |
| 1003 | WARD   | f        |      30 | SALESMAN |     1250 | 2003-05-12 |
| 1004 | JONES  | m        |      20 | MANAGER  |     2975 | 1998-05-18 |
| 1005 | MARTIN | m        |      30 | SALESMAN |     1250 | 2001-06-12 |
| 1006 | BLAKE  | f        |      30 | MANAGER  |     2850 | 1997-02-15 |
| 1007 | CLARK  | m        |      10 | MANAGER  |     2450 | 2002-09-12 |
| 1010 | TURNER | f        |      30 | SALESMAN |     1500 | 1997-10-12 |
+------+--------+----------+---------+----------+----------+------------+
7 rows in set (0.01 sec)

 8.按照薪资排序,取出排名在前5名的员工

mysql> select e_name,e_salary from employee-> group by e_salary-> limit 5;  //取前5
+--------+----------+
| e_name | e_salary |
+--------+----------+
| SMITH  |      800 |
| ALLEN  |     1600 |
| WARD   |     1250 |
| JONES  |     2975 |
| BLAKE  |     2850 |
+--------+----------+
5 rows in set (0.00 sec)

 9.按照薪资降序,取出排名从第3名员工开始,长度为4的信息

mysql> select e_name,e_salary from employee-> order by e_salary desc-> limit 3,4;
+--------+----------+
| e_name | e_salary |
+--------+----------+
| BLAKE  |     2850 |
| CLARK  |     2450 |
| ALLEN  |     1600 |
| TURNER |     1500 |
+--------+----------+
4 rows in set (0.00 sec)

 10.如何显示与SMITH同一部门的所有员工

mysql> select  e_name,dept_no->     from employee->     where  dept_no = (->     select dept_no->     from employee->     where e_name = 'SMITH'->     );
+--------+---------+
| e_name | dept_no |
+--------+---------+
| SMITH  |      20 |
| JONES  |      20 |
| scorr  |      20 |
| ADAMS  |      20 |
+--------+---------+
4 rows in set (0.00 sec)

三、xtrabackup备份和还原数据库练习

xtrabackup特点

备份还原过程快速、可靠

备份过程不会打断正在执行的事务

能够基于压缩等功能节约磁盘空间和流量

自动实现备份校验

开源、免费

xtrabackup2.2版之前包括4个可执行文件

innobackupex:        Perl脚本

xtrabackup:            C/C++,编写的二进制程序

xbcrypt:                  加解密

xbstream:               支持并发写的流文件格式

xtrabackup备份工具

percona提供的mysql数据库备份工具,唯一开源的能够对innodb和xtradb数据库进行热备的工具

手册:Redirectinghttps://www.percona.com/doc/percona-xtrabackup/LATEST/index.html

下载:Download Percona XtraBackup 8.0Download Percona XtraBackup which is an open source, free MySQL® hot backup software that performs non-blocking backups for InnoDB and XtraDB databases.https://www.percona.com/downloads/XtraBackup/LATEST/

xtrabackup备份过程

利用xtrabackup安全、增量备份及还原

利用xtrabackup8.0进行完全、增量备份及还有mysql8.0

安装xtrabackup包(备份、还原主机都需要安装都相同版本xtrabackup包)

yum -y install percona-xtrabackup-80-8.0.23-16.1.e18.x86_64.rpm

在原主机做完全备份到/backup

#指定备份目录
mkdir  /backup
#支持用户名、密码验证,指定备份选项及备份到/backup/base目录下,/base不需要事先创建,他会自动创建
xtrabackup -uroot -p123456 --backup --target-dir=/backup/base

目标主机无需创建/backup目录,直接复制目录本身

#例如:scp -r /backup/     192.168.116.130:/scp -r /backup/     目标主机:/

在目标主机上还原

注意:恢复主机mysql服务停止,并且数据目录为空

预准备:确保数据一致,提交做的事务,回滚未完成的事务

yum -y install percona-xtrabackup-80-8.0.23-16.1.e18.x86_64.rpm
#--perpare,保证数据事务完整状态,数据一致性原则
xtrabackup --perpare --target-dir=/backup/base

复制到数据库目录

注意:数据库目录为空,mysql服务不能启动

xtrabackup --copy-back --target-dir=/backup/base

还原属性

#修改文件属性所有者,组为mysql
chmod -R mysql.mysql /var/lib/mysql

启动服务

service mysqld start

登录数据库核对数据是否备份、还原完成 

四、实现mysql主从复制

一主一从复制架构

主从复制原理图 

 主机环境

主节点     10.0.0.129     mysql 8.0.26        hostname-master

从节点     10.0.0.128     mysql 8.0.26        hostname-slave1

环境准备

关闭防火墙

关闭selinux

时间同步

主、从服务器使用相同版本mysql数据库

主从复制特点

异步复制

主从数据不一致比较常见

主从复制实现

主节点配置:

1.启用二进制日志(mysql8.0版本是默认开启的)

[mysqld]
log_bin
2.为当前节点设置一个全局惟一的ID号

[17:59:36 root@master ~]#vim /etc/my.cnf

#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]#
# include all files from the config directory
#
!includedir /etc/my.cnf.d[mysqld]
server-id=129
log-bin=/data/logbin/mysql-bin

3.创建数据备份目录并修改所属权限为mysql

[16:07:16 root@master ~]#mkdir /data/logbin[16:07:46 root@master ~]#chown mysql.mysql /data/logbin

4.重新启动myslq服务

[16:08:15 root@master ~]#systemctl restart mysqld

5.查看/data/logbin/目录是否有数据生成

[16:09:08 root@master ~]#ls /data/logbin/ 

6.登录mysql,创建账号

指定账号名、密码及使用的网段

 [16:09:25 root@master ~]#mysqlmysql> create user repluser@'10.0.0.%' identified by '123456'; Query OK, 0 rows affected (0.02 sec) 

7.账号授权,所有信息都能进行复制 * . *

mysql> grant replication slave on * . *to repluser@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)

此时主节点配置及账号创建完成

8.开始备份

[16:18:56 root@master ~]#mysqldump -A -F --single-transaction --master-data > /backup/full-`date +%F`.sql

9.从节点设置一个全局惟一的ID号

vim /etc/my.cnf.d

10.在主节点将备份的数据复制到从节点

[16:40:08 root@master ~]#scp /backup/full-2022-10-24.sql  10.0.0.128:/backup
root@10.0.0.128's password:
full-2022-10-24.sql                                                                         100% 1198KB  65.0MB/s   00:00  

11.在从节点查看一下,是否拷贝成功 (有数据说明成功)

[16:40:55 root@slave1 ~]#ls /backup/
full-2022-10-24.sql

12.指定哪个账号,密码连接的主节点IP地址,并且从哪个位置的二进制进行同步

[16:41:10 root@slave1 ~]#vim /backup/full-2022-10-24.sql CHANGE MASTER TOMASTER_HOST='10.0.0.129',MASTER_USER='repluser',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=156;

13.开始还原

从节点临时关闭二进制

mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)

14.数据还原

mysql> source /backup/full-2022-10-24.sql ; 

15.再开启二进制

mysql> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)

16.查看线程同步信息(此时运行状态为NO,说明目前未运行)

mysql> show slave status\G

17.在从节点开启同步线程

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

18.查看从节点线程状态

mysql> show processlist;

19.主节点查看线程状态,说明开启成功

mysql> show processlist;

20.主节点查看(说明建立连接)

[17:07:52 root@master ~]#ss -nt

21.从节点查看

mysql> show slave status\G

22.新增mysql数据,对比主从相关记录变化,完成

五、 用mycat实现mysql的读写分离

mycat介绍

Mycat是数据库中间件,所谓中间件,是一类连接软件组件和应用的计算机软件,以便软件各部件之间的通信。

例如 tomcat,web的中间件。而数据库中间件是连接Java应用程序和数据库中间的软件。

mycat特点

前身是阿里的cobar
一个开源的,面向企业应用开发的大数据库集群
支持事务、ACID、可以替代MySQL的加强版数据库
一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品

mycat原理

Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

利用mycat实现mysql的读、写分离

准备环境

#关闭selinux和防火墙

systemctl stop  firewlld

setenforce 0

时间同步服务

 服务器共三台

mycat-server

mysql-master        mysql 8.0版本

mysql-slave           mysql 8.0版本

1. 创建mysql主从数据库

yum - y install mysql-server或者yum -y install mariadb-server

1)修改master和slave上的配置文件

#master上的my.cfgvim /etc/my.cfg.d/mariadb-server.cnf[mysqld]server-id = 1log-bin
#salve上的my.cnf[mysqld]server-id = 2

 配置修改完成之后重启数据库服务

systemctl start mariadb

2)master上创建复制用户

mysql -uroot -p

3)slave上执行

master -uroot -p

2.在mysql代理服务器上安装mycat并启动

[ root@rocky8 ~]#yum -y install java
#确认安装成功
java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)

#下载并安装

 wget http://d1.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
 wget http://d1.mycat.org.cn/1.6.7.6/Mycat-server-1.6.7.6-release-/Mycat-server-1.6.7.4-release-20210303094759-linux.tar.gz  -C /apps
mkdir /apps
[root@rocky8 ~]#tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz  -C /apps/

[root@rocky8 ~]#tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz  -C /apps

#配置环境变量

[root@rocky8 ~]#echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
[root@rocky8 ~]#source /etc/profile.d/mycat.sh

启动mycat

[root@rocky8 ~]#file /apps/mycat/bin/mycat
/apps/mycat/bin/mycat: POSIX shell script, ASCII text executable[root@rocky8 ~]#mycat
Usage: /apps/mycat/bin/mycat { console | start | stop | restart | status | dump }

注意:此步启动较慢,需要等一会儿,另外如果内存太小,会导致无法启动

[22:12:26 root@rocky8 ~]#mycat start
Starting Mycat-server...

#查看日志,确定成功

tail /apps/mycat/logs/wrapper.log

 4.在mycat服务器上修改server.xml文件配置mycat的连接信息

#修改下面行的8066改为3306复制到独立非注释行

5.修改schema.xml实现读写分离策略

 重新启动mycat

mycat restart

范例:schema.xml

 6.在后端主服务器创建用户并对mycat授权

 7.在mycat服务器上连接并测试

mysql -uroot -p123456 -h 192.168.116.130 TESTDB

8.通过通用日志确认实现读写分离

 9.停止从节点,mycat自动调度读请求至主节点

 10.mycat对后端服务器的健康性检查方法 select user()

六、实现openvpn部署,并且测试通过,输出博客或者自己的文档存档

openvpn官网:https://openvpn.net/

openvpn客户端安装过程:

实现mysql主从复制相关推荐

  1. 基于GTID模式MySQL主从复制

    基于GTID模式MySQL主从复制 GTID复制原理: 基于GTID的复制是MySQL 5.6后新增的复制方式 GTID (global transaction identifier) 即全局事务ID ...

  2. mysql 主从复制 性能_zabbix监控mysql各项性能,主从复制

    ###################################################### 监控mysql(默认监控模板不能用,再agentd.conf开启自定义key,自己编写脚本 ...

  3. mysql主从复制(master-slave)_mysql主从复制------Master-Slave搭建及注意事项

    前言 关于mysql主从复制的原理实际上是很通俗易懂的,可是,在实际的搭建这个结构的时候,仍是会遇到不一样的状况的.因而下面介绍的是搭建Master-Slave的操做及注意事项,本文不含数据库的调优参 ...

  4. 【MySQL】面试官:如何添加新数据库到MySQL主从复制环境?

    今天,一名读者反馈说:自己出去面试,被面试官一顿虐啊!为什么呢?因为这名读者面试的是某大厂的研发工程师,偏技术型的.所以,在面试过程中,面试官比较偏向于问技术型的问题.不过,技术终归还是要服务于业务的 ...

  5. mysql主从复制 跳过表_mysql主从复制-从库跳过异常日志点

    mysql主从复制-从库跳过异常日志点 来源:互联网 作者:佚名 时间:2015-03-08 08:39 mysql主从复制--从库跳过错误日志点 (本文转载,特此声明) 在MYSQL进行Replic ...

  6. mysql 主从复制

    mysql 主从 1 更改主数据库配置文件 cat > /etc/my.cnf <<EOF [mysqld] server-id=1 log-bin EOF 2 重启mysql /e ...

  7. mysql主从复制监控shell脚本

    ########本脚本应用在生产环境中,是运用mysql主从的基础上######## vi mysqlm-s.sh #!/bin/bash ip=`ifconfig eth0|sed -n 2p|aw ...

  8. mysql主从复制实战

    一,mysql主从复制的原理 mysql支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新. ...

  9. 老男孩教育每日一题-2017年4月28日- MySQL主从复制常见故障及解决方法?

    MySQL主从复制常见故障及解决方法? 1.1.1故障1:从库数据与主库冲突 show slave status; 报错:且show slave status\G Slave_I/O_Running: ...

  10. mysql主从复制原理详解_MySQL主从复制没使用过?三大步骤让你从原理、业务上理解透彻...

    成长是一棵树,总是在你不知不觉的情况下快乐长大:成长是一株草,总是在你不知不觉的情况下长满大地:成长是一朵花,总是在你不知不觉的情况下开满山头. 这不,随着时间的迁移.项目网站的用户量.数据量持续上升 ...

最新文章

  1. html 复选框 mysql_Html:实现带复选框的下拉框(一)
  2. C#与西门子PLC通讯
  3. RabbitMQ,Springboot整合RabbitMQ实现 消息可靠性投递,Consumer ACK,TTL,死信队列,使用TTL+死信队列=延迟队列
  4. dll 文件创建与使用
  5. 三角函数常用公式一篇汇
  6. IAR Embedded Workbench IDE 显示行号
  7. 疟疾识别图像数据集(27000张图像,2类图像)
  8. JAVAFX输入法的实现
  9. ICTCLAS 汉语词性标注集
  10. Mac虚拟机连接局域网网线的路由配置
  11. 论本我、自我、超我对人工智能的启示
  12. Python——>图像的字符画绘制
  13. Java爬虫Jsoup爬取必应壁纸
  14. 第二期金牌网管师100%就业培训班招生简章
  15. java计算机毕业设计学生学籍信息管理系统源码+mysql数据库+lw文档+系统+调试部署
  16. geany配置python_Geany配置python教程解析
  17. 数据库课程设计-职工工资管理系统
  18. java for循环如何优化_java for循环及其优化
  19. 解决:npm ERR! code ELIFECYCLE npm ERR! errno 1
  20. 人间不值得:我们一起走过的2018

热门文章

  1. 华师计算机系统课程作业答案,华师在线计算机专业操作系统期末作业
  2. 数据库系统之物理设计
  3. Jquery入门指南教程
  4. kubectl插件管理器krew
  5. 小米笔记本重装系统后触摸板失灵 的原因之一
  6. 制作自己的CTPN训练集
  7. 人群密度检测matlab算法,基于视频的人员密度检测.doc
  8. 【IDEA】使用@slf4j 运行时提示找不到符号log
  9. 数据挖掘实战(9.5)--使用神经网络识别MINIST数据集
  10. RPA自动化软件汇总