1.简述DDL,DML,DCL,DQL,并且说明mysql各个关键字查询时候的先后顺序
在关系型数据库管理系统(RDBMS)中,DDL、DML、DCL和DQL是四种不同类型的SQL语言,用于定义、操作、控制和查询数据库。这些类型包括:
- DDL(Data Definition Language,数据定义语言): DDL用于定义数据库对象,例如表、索引、视图等。常见的DDL关键字包括:
- CREATE:用于创建数据库对象,如表、索引等。
- ALTER:用于修改已存在的数据库对象的结构,如添加列、删除列等。
- DROP:用于删除数据库对象,如删除表、索引等。
- DML(Data Manipulation Language,数据操作语言): DML用于对数据库中的数据进行操作,例如插入、更新、删除数据。常见的DML关键字包括:
- INSERT:用于向表中插入新的行。
- UPDATE:用于更新表中已有的行。
- DELETE:用于从表中删除行。
- DCL(Data Control Language,数据控制语言): DCL用于控制数据库访问权限和事务管理。常见的DCL关键字包括:
- GRANT:用于授权特定权限给数据库用户。
- REVOKE:用于从数据库用户撤销特定权限。
- COMMIT:用于提交事务。
- ROLLBACK:用于回滚事务。
- DQL(Data Query Language,数据查询语言): DQL用于查询数据库中的数据,也就是执行SELECT语句。常见的DQL关键字包括:
- SELECT:用于从数据库中检索数据。
- FROM:指定数据表或视图的来源。
- WHERE:用于设置查询条件。
- ORDER BY:用于对查询结果排序。
在MySQL中,执行SQL查询时的关键字顺序为:
- DQL语句:先执行SELECT查询语句来获取数据。
- DML语句:如果需要,执行INSERT、UPDATE、DELETE等语句来操作数据。
- DDL语句:如果需要,执行CREATE、ALTER、DROP等语句来定义或修改数据库对象的结构。
- DCL语句:最后执行GRANT、REVOKE等语句来管理数据库访问权限。
注意:在实际应用中,多个SQL语句可以组合在一起执行,执行顺序可能会根据具体情况有所变化。以上顺序仅表示一般情况下的执行顺序。
2.自行设计10个sql查询语句,需要用到关键字[GROUP BY/HAVING/ORDER BY/LIMIT],至少同时用到两个。
select classid,count(*) from 数量 from students group by classid limit 3;
select * from students order by age desc limit 3
select classid,avg(age) as 平均年龄 from sutdents where classid > 3 group by classid having 平均年龄 > 30 ;
select gender,avg(age) 平均年龄 from students group by gender having gender='M';
select * from students order by name desc limit 2;
select * from students order by name desc limit 1,7;
select classid,sum(age) from students group by classid having classid is not null order by classid;
select gender,group_concat(name) from students group by gender limit 0,5;
select classid,count(*) 数量 from students group by classid order by 数量;
select gender,classid,avg(age) from students where classid is not null group by gender,classid order by gender,classid;
3.xtrabackup备份和还原数据库练习
1 备份过程
1)完全备份:
[root@centos8 ~]#yum -y install percona-xtrabackup-24-2.4.20-1.el8.x86_64.rpm
[root@centos8 ~]#mkdir /backup/
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/base
2)第一次修改数据
3)第一次增量备份
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/inc1 --
incremental-basedir=/backup/base
4)第二次修改数据
5)第二次增量
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/inc2 --
incremental-basedir=/backup/inc1
6)[root@centos8 ~]#scp -r /backup/* 目标主机:/backup/
#备份过程生成三个备份目录
/backup/{base,inc1,inc2}
2还原过程
1)预准备完成备份,此选项--apply-log-only 阻止回滚未完成的事务
[root@centos8 ~]#yum -y install percona-xtrabackup-24-2.4.20-1.el8.x86_64.rpm
[root@centos8 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base
2)合并第1次增量备份到完全备份
[root@centos8 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1
3)合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only
[root@centos8 ~]#xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc2
4)复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动
[root@centos8 ~]#xtrabackup --copy-back --target-dir=/backup/base
5)还原属性:
[root@centos8 ~]#chown -R mysql:mysql /var/lib/mysql
6)启动服务:
[root@centos8 ~]#service mysqld start
4. 实现mysql主从复制,主主复制和半同步复制
主从复制
主节点
#修改master主节点的配置
[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
server-id=8
log-bin=/data/mysql/logbin/mysql-bin
[root@centos8 ~]#systemctl restart mysqld
#完全备份
[root@centos8 ~]#mysqldump -A -F --master-data=1 --single-transaction > /data/all.sql
#创建复制用户并授权
mysql>create user repluser@"10.0.0.%" identified by "123456"
mysql>grant replication slave on *.* to repluser@"10.0.0.%"";
#将备份复制到从节点
[root@centos8 ~]#scp /data/all.sql 从节点:/data
#配置从节点
[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
server-id=18
read-only
[root@centos8 ~]#systemctl restart mysqld
#从节点修改备份文件
[root@centos8 ~]#vim /data/all.sql
CHANGE MASTER TO
MASTER_HOST='主节点',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=156;
#从节点还原备份
mysql> set sql_log_bin=0;
mysql> source /data/all.sql;
mysql>set sql_log_bin=1;
#从节点开始复制
mysql> start slave;
主主复制
#在第一个master节点上实现
[root@master1 ~]#vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=8
log-bin
auto_increment_offset=1 #开始点
auto_increment_increment=2 #增长幅度
[root@master1 ~]#systemctl start mariadb
[root@master1 ~]#mysql
MariaDB [(none)]>show master logs;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 28303 |
| mariadb-bin.000002 | 386 |
+--------------------+-----------+
2 rows in set (0.000 sec)
MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.100.%'
identified by 'magedu';
#在第二个master节点上实现
[rootmaster2 ~]#vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=18
log-bin
auto_increment_offset=2 #开始点
auto_increment_increment=2 #增长幅度
[root@master2 ~]#systemctl start mariadb
[root@master2 ~]#mysql
MariaDB [(none)]> CHANGE MASTER TO
-> MASTER_HOST='192.168.100.8',
-> MASTER_USER='repluser',
-> MASTER_PASSWORD='magedu',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mariadb-bin.000002',
-> MASTER_LOG_POS=386;
Query OK, 0 rows affected (0.019 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.003 sec)
MariaDB [(none)]> show master logs; #查看二进制位置
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 28303 |
| mariadb-bin.000002 | 344 |
+--------------------+-----------+
2 rows in set (0.001 sec)
#在第一个master节点上实现
MariaDB [(none)]> CHANGE MASTER TO
-> MASTER_HOST='192.168.100.18',
-> MASTER_USER='repluser',
-> MASTER_PASSWORD='magedu',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mariadb-bin.000002',
-> MASTER_LOG_POS=344;
Query OK, 0 rows affected (0.007 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.002 sec)
MariaDB [db1]> create table t1(id int auto_increment primary key,name char(10));
#两个节点分别插入数据
#在第一个节点上执行
MariaDB [db1]> create database db1;
MariaDB [db1]> insert t1 (name) values('user1');
#在第二个节点上执行
MariaDB [db1]> insert t1 (name) values('user2');
#两个节点同时插入数据
MariaDB [db1]> insert t1 (name) values('userX');
MariaDB [db1]> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | user1 |
| 2 | user2 |
| 3 | userX |
| 4 | userX |
+----+-------+
4 rows in set (0.001 sec)
#两个节点同时创建数据库,发生复制冲突
MariaDB [db1]> create database db2;
MariaDB [db1]> show slave status\G
半同步复制
#查看插件文件
[root@centos8 ~]#rpm -ql mysql-server |grep semisync
/usr/lib64/mysql/plugin/semisync_master.so
/usr/lib64/mysql/plugin/semisync_slave.so
#master服务器配置
[root@master ~]#vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=8
log-bin
rpl_semi_sync_master_enabled=ON #修改此行,需要先安装semisync_master.so插件后,再重启,否则无法启动
rpl_semi_sync_master_timeout=3000 #设置3s内无法同步,也将返回成功信息给客户端
#slave服务器配置
[root@slave1 ~]#vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=18
rpl_semi_sync_slave_enabled=ON #修改此行,需要先安装semisync_slave.so插件后,再重启,否则无法启动
[root@slave2 ~]#vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=28
rpl_semi_sync_slave_enabled=ON #修改此行,需要先安装semisync_slave.so插件后,再重启,否则无法启动
#主服务器配置:
mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; #永久安装插件
mysql>UNINSTALL PLUGIN rpl_semi_sync_master ;
mysql>SHOW PLUGINS; #查看插件
mysql>SET GLOBAL rpl_semi_sync_master_enabled=1; #临时修改变量
mysql>SET GLOBAL rpl_semi_sync_master_timeout = 3000; #超时长1s,默认值为10s
mysql>SHOW GLOBAL VARIABLES LIKE '%semi%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.00 sec)
mysql> SHOW GLOBAL STATUS LIKE '%semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 2 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 1 |
| Rpl_semi_sync_master_no_tx | 2 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+
14 rows in set (0.00 sec)
#从服务器配置:
mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql>SET GLOBAL rpl_semi_sync_slave_enabled=1; #临时修改变量
mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
2 rows in set (0.00 sec)
#注意:如果已经实现主从复制,需要stop slave;start slave;
mysql> stop slave;
mysql> start slave;
mysql> SHOW GLOBAL STATUS LIKE '%semi%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.00 sec)
5.用mycat实现mysql的读写分离
(1)修改master和slave上的配置文件
1、修改master和slave上的配置文件
#修改master上的my.cnf
vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=1
log-bin
#修改slave上的my.cnf
[mysqld]
server-id=2
2、master上创建复制用户
mysql -uroot
grant replication slave on *.* to 'repluser'@'192.168.50.%' identified by '123456' ;
flush privileges;
show master status;
3、slaver 上执行
mysql -uroot
change master to
-> MASTER_HOST='192.168.50.200',
-> MASTER_USER='repluser',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mariadb-bin.000001',
-> MASTER_LOG_POS=856;
start slave
show slave status\G
(2)在mysql代理服务器上安装mycat并启动
yum -y install java
wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
mkdir /apps
tar xvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /apps/
tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps
echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
source /etc/profile.d/mycat.sh
#启动mycat
file /apps/mycat/bin/mycat
mycat start
ss -ntl
(3)在mycat服务器上修改server.xml文件配置mycat的连接信息
vim /apps/mycat/conf/server.xml
#重新插入
<property name="serverPort">3306</property>
<property name="handlelDistributedTransactions">0</property>
(4)修改schema.xml实现读写分离策略
vim /apps/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"
dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="hellodb" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="host1" url="192.168.50.200:3306" user="root"
password="123456">
<readHost host="host2" url="192.168.50.3:3306" user="root"
password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
#重新启动mycat
mycat restart
(5)在后端主服务器创建用户并对mycat授权
mysql -uroot
create databses mycat ;
grant all on *.* to 'root'@192.168.50.%' identified by '123456';
flush privileges;
(6)通过通用日志确认实现读写分离
#在mysql中查看通用日志
set global general_log=on;
#在主和从服务器分别启用通用日志,查看读写分离
vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
general_log=ON
6.实现openvpn部署,并且测试通过,输出博客或者自己的文档存档。
1openvpn部署
购买并且配置云服务器
通过server服务器的公网地址:118.195.181.27,使用ssh连接到内部网络的web1:172.30.0.13和web2:172.30.0.4
server私网地址为172.30.0.10。
1.1安装 OpenVPN 软件包
首先,查看OpenVPN 版本
[root@centos8 ~]#yum list easy-rsa
通过阿里云镜像平台,配置epel源来下载easy-rs
yum -y install easy-rsa.noarch
#生成服务器配置文件
[root@centos8 ~]#cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf/etc/openvpn/
#准备证书颁发相关文件
[root@centos8 ~]#mkdir -p /data/easy-rsa;cp -r /usr/share/easy-rsa/3/* /data/easy-rsa
#准备颁发证书相关变量的配置文件
[root@centos8 ~]#cp /usr/share/doc/easy-rsa/vars.example /data/easy-rsa/vars
#建议修改给CA和OpenVPN服务器颁发的证书的有效期,可适当加长
[root@centos8 ~]#vim /etc/openvpn/easy-rsa/vars
#CA的证书默认有效期为10年,可以适当延长,比如:36500天
#set_var EASYRSA_CA_EXPIRE 3650
#将上面行修改为下面
set_var EASYRSA_CA_EXPIRE 36500
#服务器证书默为为825天,可适当加长,比如:3650天
#set_var EASYRSA_CERT_EXPIRE 825
#将上面行修改为下面
set_var EASYRSA_CERT_EXPIRE 3650
1.2初始化PKI生成PKI相关目录和文件
[root@centos8 ~]#cd /data/easy-rsa/
[root@centos8 3]#pwd
/etc/openvpn/easy-rsa-server/3
[root@centos8 3]#ls
easyrsa openssl-easyrsa.cnf vars x509-types
#初始化数据,在当前目录下生成pki目录及相关文件
[root@centos8 3]#./easyrsa init-pki
Note: using Easy-RSA configuration from: /etc/openvpn/easy-rsa-server/3.0.7/vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /data/easy-rsa/pki
[root@centos8 3]#tree
.
├── easyrsa
├── openssl-easyrsa.cnf
├── pki #生成一个新目录及相关文件
│ ├── openssl-easyrsa.cnf
│ ├── private
│ ├── reqs
│ └── safessl-easyrsa.cnf
├── vars
└── x509-types
├── ca
├── client
├── code-signing
├── COMMON
├── email
├── kdc
├── server
└── serverClient
4 directories, 13 files
自己搭建的证书
1.3准备证书相关文件
1.3.1创建 CA 机构环境
[root@centos8 3]#./easyrsa build-ca nopass
sz pki/ca.crt #将自签名搭建的证书,传到window上查看
1.3.1.1创建服务端证书申请
[root@centos8 ~]#cd /etc/openvpn/easy-rsa-server/3
[root@centos8 3]#pwd
/etc/openvpn/easy-rsa-server/3
#创建服务器证书申请文件,其中server是文件前缀
[root@centos8 3]#./easyrsa gen-req server nopass
1.3.1.2颁发服务端证书
[root@centos8 ~]#cd /data/easy-rsa/
[root@centos8 easy-rsa]#./easyrsa sign server server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes #输入yes回车
配置服务端证书时需要diff-hellman密钥,下面开始创建密钥
1.3.2创建 Diffie-Hellman 密钥
创建 Diffie-Hellman 密钥
#生成diffie-hellman密钥;
[root@centos8 3]#./easyrsa gen-dh
至此服务器端证书配置完成
1.3.3准备客户端证书环境
#生成客户端用户的证书申请
[root@centos8 easy-rsa]#./easyrsa gen-req feifan nopass
1.3.4颁发客户端证书
#修改给客户端颁发的证书的有效期
[root@centos8 3]#vim vars
#建议修改给客户端颁发证书的有效期,可适当减少,比如:90天
#set_var EASYRSA_CERT_EXPIRE 825
#将上面行修改为下面
set_var EASYRSA_CERT_EXPIRE 180
#颁发客户端证书
[root@centos8 3]#./easyrsa sign client feifan
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes #输入yes后回车
至此客户端证书颁发完成;
1.3.5将CA和服务器证书相关文件复制到服务器相应的目录
[root@centos8 ~]#mkdir /etc/openvpn/certs
[root@centos8 ~]#cp /etc/openvpn/easy-rsa-server/3/pki/ca.crt /etc/openvpn/certs/
[root@centos8 ~]#cp /etc/openvpn/easy-rsa-server/3/pki/issued/server.crt /etc/openvpn/certs/
[root@centos8 ~]#cp /etc/openvpn/easy-rsa-server/3/pki/private/server.key /etc/openvpn/certs/
[root@centos8 ~]#cp /etc/openvpn/easy-rsa-server/3/pki/dh.pem /etc/openvpn/certs/
[root@centos8 ~]#ll /etc/openvpn/certs/
total 20
-rw------- 1 root root 1204 Aug 3 20:34 ca.crt
-rw------- 1 root root 424 Aug 3 20:35 dh.pem
-rw------- 1 root root 4608 Aug 3 20:34 server.crt
-rw------- 1 root root 1704 Aug 3 20:35 server.key
1.3.6将客户端私钥与证书相关文件复制到服务器相关的目录
[root@VM-0-10-rockylinux easy-rsa]# mkdir /etc/openvpn/client/feifan
[root@VM-0-10-rockylinux easy-rsa]# cp /etc/openvpn/certs/ca.crt /etc/openvpn/client/feifan/
[root@VM-0-10-rockylinux easy-rsa]# cp pki/issued/feifan.crt /etc/openvpn/client/feifan/
[root@VM-0-10-rockylinux easy-rsa]# cp pki/private/feifan.key /etc/openvpn/client/feifan/
1.4准备 OpenVPN 服务器配置文件
1.4.1 服务器端配置文件说明
#将OpenVPN 服务器配置文件拷贝到/etc/openvpn/目录下
cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/
1.4.2 修改服务器端配置文件
[root@centos8 ~]#vim /etc/openvpn/server.conf
[root@centos8 ~]#grep '^[a-Z].*' /etc/openvpn/server.conf
port 1194
proto tcp
dev tun
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/server.crt
key /etc/openvpn/certs/server.key # This file should be kept secret
dh /etc/openvpn/certs/dh.pem
server 10.8.0.0 255.255.255.0
push "route 172.30.0.0 255.255.255.0"
keepalive 10 120
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
max-clients 2048
user openvpn
group openvpn
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
mute 20
#准备目志相关目录
[root@centos8 ~]#getent passwd openvpn
openvpn:x:993:990:OpenVPN:/etc/openvpn:/sbin/nologin
[root@centos8 ~]#mkdir /var/log/openvpn
[root@centos8 ~]#chown openvpn.openvpn /var/log/openvpn
[root@centos8 ~]#ll -d /var/log/openvpn
drwxr-xr-x 2 openvpn openvpn 6 Aug 3 23:07 /var/log/openvpn
1.5启动 OpenVPN 服务
1.5.1启动 OpenVPN 服务
[root@centos8 ~]#vim /usr/lib/systemd/system/openvpn@.service
[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=network.target
[Service]
Type=notify
PrivateTmp=true
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config %i.conf
[Install]
WantedBy=multi-user.target
#启动OpenVPN服务,注意service名称和文件名不一致
[root@centos8 openvpn]#systemctl daemon-reload
[root@centos8 openvpn]#systemctl enable --now openvpn@server
成功启动服务之后,通过本地Xshell会话,使用telnet 连接
1.6 准备 OpenVPN 客户端配置文件
1.6.1生成客户端用户的配置文件
#修改配置文件,内容如下
[root@centos8 ~]#vim /etc/openvpn/client/feifan/client.ovpn
client
dev tun
proto tcp
remote 118.195.181.27 1194 #生产中为OpenVPN公网IP或者FQDN
resolv-retry infinite
nobind
#persist-key
#persist-tun
ca ca.crt
cert feifan.crt
key feifan.key
remote-cert-tls server
#tls-auth ta.key 1
cipher AES-256-CBC
verb 3 #此值不能随意指定,否则无法通信
compress lz4-v2 #此项在OpenVPN2.4.X版本使用,需要和服务器端保持一致,如不指定,默认使用comp-lz压缩
1.7 实现 OpenVPN 客户端
1.7.1 Windows 配置部署 OpenVPN 客户端
1.7.1.2 Windows 客户端配置准备
保存证书到openvpn 客户端安装目录
#在服务器打包证书并下载发送给windows客户端
[root@centos8 ~]#cd /etc/openvpn/client/feifan/
[root@centos8 feifan]#pwd
/etc/openvpn/client/feifan
[root@centos8 feifan]#tar cf feifan.tar ./
tar: ./feifan.tar: file is the archive; not dumped
[root@centos8 feifan]#ll
total 40
-rw------- 1 root root 1204 Aug 3 21:05 ca.crt
-rw-r--r-- 1 root root 231 Aug 3 23:31 client.ovpn
-rw------- 1 root root 4506 Aug 3 21:05 feifan.crt
-rw------- 1 root root 1704 Aug 3 21:05 feifan.key
-rw-r--r-- 1 root root 20480 Aug 4 10:48 feifan.tar
[root@centos8 wangxiaochun]#tar tf feifan.tar
./
./feifan.key
./feifan.crt
./ca.crt
./client.ovpn
安装完openvpn后找到指定的文件路径,在conf文件夹中,将在openvpn服务器中生成的指定证书打包到此文件夹下并解压。
1.7.1.4 在Windows 客户端测试访问OpenVPN后端服务器
1.8实现访问VPN服务器的内网主机
1.8.1 OpenVPN服务器打开 ip_forward功能
#在服务器开启ip_forward转发功能
[root@centos8 ~]#echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
[root@centos8 ~]#sysctl -p
net.ipv4.ip_forward = 1
1.8.2 配置实现内网服务器回应外网的请求的路由
1.8.2.1 在内网每个主机上添加路由(本次实验暂未使用)
#阿里云服务器不支持修改路由
[root@rocky8 ~]#route add -net 10.8.0.0/24 gw 172.30.0.1
1.8.2.2 在内网主机指定的路由器上添加路由(本次实验暂未使用)
[root@router ~]#route add -net 10.8.0.0/24 gw 172.30.0.1
1.8.2.3 在OpenVPN服务器配置 iptables 规则
#本次实验使用的方法为
[root@centos8 ~]#iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to 172.30.0.10
[root@centos8 ~]#iptables -vnL -t na
然后windows客户端就可以通过openvpn来访问内网
7.mysql如何实现崩溃后恢复?
MySQL数据库崩溃可能是由于以下原因所导致的:
1.硬件故障:如电源故障、硬盘坏道等。
2.操作系统故障:如操作系统崩溃、系统资源不足等。
3.网络故障:如网络中断、网络延迟等。
4.软件故障:如MySQL服务崩溃、MySQL配置错误等。
MySQL数据库恢复的方法
当MySQL数据库发生崩溃时,我们需要采取一些措施来恢复数据。下面是一些常见的MySQL数据库恢复方法:
1.备份恢复:如果你有备份,可以使用备份文件来恢复数据。在MySQL崩溃后,你可以使用备份文件来恢复数据库。
2.log日志文件来恢复数据。
3.noDBnoDBnoDB引擎,那么可以使用MySQL的崩溃恢复机制来恢复数据。
4.使用MyISAM引擎:MyISAM是MySQL的另一种存储引擎,它不支持事务和崩溃恢复。如果你使用的是MyISAM引擎,那么可以使用MySQL的修复命令来恢复数据。
5.Toolkit可以用来恢复MySQL数据库。
如何预防MySQL数据库崩溃
当然,最好的方法是预防MySQL数据库崩溃。以下是一些预防措施:
1.定期备份数据:定期备份数据是非常重要的,可以确保你有备份文件可用于恢复数据。
2.优化MySQL配置:优化MySQL配置可以提高MySQL的性能和稳定性,从而减少MySQL崩溃的可能性。
3.使用监控工具:使用监控工具可以实时监测MySQL的状态,及时发现问题并采取措施。
4.使用合适的存储引擎:选择合适的存储引擎可以提高MySQL的性能和稳定性,从而减少MySQL崩溃的可能性。
8.myisam和innodb各自在什么场景使用?
MyISAM和InnoDB两者的应用场景:
- MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
- InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。
但是实际场景中,针对具体问题需要具体分析,一般而言可以遵循以下几个问题:
- 数据库是否有外键?
- 是否需要事务支持?
- 是否需要全文索引?
- 数据库经常使用什么样的查询模式?在写多读少的应用中还是Innodb插入性能更稳定,在并发情况下也能基本,如果是对读取速度要求比较快的应用还是选MyISAM。
- 数据库的数据有多大? 大尺寸倾向于innodb,因为事务日志,故障恢复。