IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 实现mysql主从复制 -> 正文阅读

[大数据]实现mysql主从复制

目录

一、简述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<=20

SELECT * FROM emp WHERE age>=15 AND age<=20

SELECT * 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=40

SELECT * 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 employee
    where e_job in (
    select distinct e_job
        from employee
        where 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,dept
     where 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> select
     e_name as '员工姓名',d_name as '部门名' //起别名
     from
     employee join dept
     on
     employee.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> select
       e_name as '员工姓名',d_name as '部门名'
          from
          employee e right outer join dept d  //outer可以省略
          on
          e.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 ~]#mysql

mysql> 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 TO
  MASTER_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.cfg

vim /etc/my.cfg.d/mariadb-server.cnf

[mysqld]

server-id = 1

log-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客户端安装过程:

?

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:04:09  更:2022-10-31 12:08:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:49:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码