如何搭建 MySQL 高可用高性能集群


Posted in MySQL onJune 21, 2021

文档链接

搭建集群的前置工作

至少准备 3 台服务器,一台作为管理服务器,两台作为数据服务器和 SQL 服务器,当然有更多的服务器会更好。

管理服务器mgm:192.168.0.105
数据服务器ndb1:192.168.0.106
数据服务器ndb2:192.168.0.104
sql服务器:192.168.0.106
sql服务器:192.168.0.104

开始部署集群

首先下载 MySQL NDB Cluster二进制文件,解压缩后开始下面的步骤。

部署管理服务器

更新系统

apt update -y && apt upgrade -y && apt install libncurses5 -y

复制 ndb_mgm 和 ndb_mgmd 到管理服务器

scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndb_mgm* mgm@192.168.0.105:/home/mgm

在管理服务器复制 ndb_mgm 和 ndb_mgmd 到/usr/local/bin 文件夹

cp -rfv /home/mgm/ndb_mgm* /usr/local/bin

赋予 ndb_mgm 和 ndb_mgmd 可执行权限

chmod +x /usr/local/bin/ndb_mgm*

添加配置文件

mkdir /var/lib/mysql-cluster
vi /var/lib/mysql-cluster/config.ini

config.ini

[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2                     # Number of fragment replicas
DataMemory=98M                     # How much memory to allocate for data storage

[ndb_mgmd]
# Management process options:
HostName=192.168.0.105             # Hostname or IP address of management node
NodeId=1                           # Node ID for this Management node
DataDir=/var/lib/mysql-cluster     # Directory for management node log files

[ndbd]
# Options for data node "A":
                                  # (one [ndbd] section per data node)
HostName=192.168.0.104            # Hostname or IP address
NodeId=2                          # Node ID for this data node
DataDir=/data/mysql-cluster/data          # Directory for this data node's data files

[ndbd]
# Options for data node "B”:
                                # (one [ndbd] section per data node)
HostName=192.168.0.106          # Hostname or IP address
NodeId=3                        # Node ID for this data node
DataDir=/data/mysql-cluster/data        # Directory for this data node's data files

[mysqld]
# SQL node options:
HostName=192.168.0.104       # Hostname or IP address
                             # (additional mysqld connections can be
                             # specified for this node for various
                             # purposes such as running ndb_restore)

[mysqld]
# SQL node options:
HostName=192.168.0.106       # Hostname or IP address
                             # (additional mysqld connections can be
                             # specified for this node for various
                             # purposes such as running ndb_restore)

开启防火墙,集群管理服务默认使用 1186 端口

ufw allow 22
ufw allow 1186
ufw enable

初始化并启动管理服务器

cd /usr/local/bin/
ndb_mgmd --initial --configdir=/var/lib/mysql-cluster -f /var/lib/mysql-cluster/config.ini --ndb-nodeid=1

当出现以下结果的时候,表示管理服务器已经启动成功了

root@mgm:/usr/local/bin# ndb_mgmd --initial --configdir=/var/lib/mysql-cluster -f /var/lib/mysql-cluster/config.ini --ndb-nodeid=1
MySQL Cluster Management Server mysql-5.7.33 ndb-7.6.17

我们再执行 ndb_mgm 命令,可以查看当前集群的状态

root@mgm:/usr/local/bin# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]	2 node(s)
id=2 (not connected, accepting connect from 192.168.0.104)
id=3 (not connected, accepting connect from 192.168.0.106)

[ndb_mgmd(MGM)]	1 node(s)
id=1	@192.168.0.105  (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)]	2 node(s)
id=4 (not connected, accepting connect from 192.168.0.104)
id=5 (not connected, accepting connect from 192.168.0.106)

部署数据服务器

在所有数据服务器上执行以下操作

更新系统

apt update -y && apt upgrade -y && apt install libncurses5 -y

开启防火墙

ufw allow 22
ufw allow 2202
ufw enable

复制 ndbd 和 ndbmtd 到数据服务器

#复制到192.168.0.106
scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbd ndb1@192.168.0.106:/home/ndb1
scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbmtd ndb1@192.168.0.106:/home/ndb1

#复制到192.168.0.104
scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbd ndb2@192.168.0.104:/home/ndb2
scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbmtd ndb2@192.168.0.104:/home/ndb2

在管理服务器复制 ndbd 和 ndbmtd 到/usr/local/bin 文件夹

#192.168.0.106
cp -rfv /home/ndb1/ndbd /usr/local/bin
cp -rfv /home/ndb1/ndbmtd /usr/local/bin

#192.168.0.104
cp -rfv /home/ndb2/ndbd /usr/local/bin
cp -rfv /home/ndb2/ndbmtd /usr/local/bin

赋予 ndbd 可执行权限

chmod +x /usr/local/bin/ndbd
chmod +x /usr/local/bin/ndbmtd

在/etc下加入my.cnf文件

vi /etc/my.cnf

my.cnf文件

[mysqld]
# Options for mysqld process:
ndbcluster                        # run NDB storage engine

[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=192.168.0.105  # location of management server

创建数据保存的目录,必须与管理服务配置的路径一致

mkdir -p /data/mysql-cluster/data

启动数据服务

root@ndb1:/usr/local/bin# ndbd
2021-06-20 08:10:23 [ndbd] INFO     -- Angel connected to '192.168.0.105:1186'
2021-06-20 08:10:23 [ndbd] INFO     -- Angel allocated nodeid: 3

回到集群管理服务器查看集群状态,此时可以看到数据服务已经连接成功

root@mgm:/usr/local/bin# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 192.168.0.104)
id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17, starting, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 192.168.0.104)
id=5 (not connected, accepting connect from 192.168.0.106)

在另一台服务器(192.168.0.104)重复 4、5、6、7 步骤的操作,结果可看到

root@ndb2:/usr/local/bin# ndbd
2021-06-20 08:20:10 [ndbd] INFO -- Angel connected to '192.168.0.105:1186'
2021-06-20 08:20:10 [ndbd] INFO -- Angel allocated nodeid: 2

回到集群管理服务器查看集群状态,此时可以看到所有数据服务已经连接成功

root@mgm:/usr/local/bin# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 192.168.0.104)
id=5 (not connected, accepting connect from 192.168.0.106)
在目录/data/mysql/data下面可以看到数据服务已经产生了数据
root@ndb1:~# ls /data/mysql/data/
ndb_3_fs ndb_3_out.log ndb_3.pid

部署 SQL 服务

复制 MySQL 到SQL服务器

scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64.tar.gz ndb2@192.168.0.104:/home/ndb2
scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64.tar.gz ndb1@192.168.0.106:/home/ndb1

解压缩 MySQL, 然后复制到/usr/local目录

tar -zxvf mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64.tar.gz
cp -rfv mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64 /usr/local/
ln -snf /usr/local/mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64 /usr/local/mysql

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile

开启防火墙

ufw allow 22
ufw allow 3306
ufw enable

创建 MySQL 数据存放的目录

mkdir -p /data/mysql/data
mkdir -p /data/mysql/run
mkdir -p /var/log/mysql

创建 mysql 用户,创建相关目录

groupadd mysql
useradd -r -g mysql -s /bin/false mysql
chown mysql:mysql /data/mysql/data
chmod 750 /data/mysql/data

chown mysql:mysql /data/mysql/run
chmod 750 /data/mysql/run

chown mysql:mysql /var/log/mysql
chmod 750 /var/log/mysql

创建 MySQL 配置文件

mkdir -p /etc/mysql
vi /etc/mysql/my.cnf
my.cnf
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine

pid-file = /data/mysql/run/mysqld.pid
socket = /data/mysql/run/mysqld.sock
datadir = /data/mysql/data
# log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address = 192.168.0.106
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 0

[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring = 192.168.0.105 # location of management server

[client]
socket = /data/mysql/run/mysqld.sock

初始化MySQL

/usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql

记录下 MySQL 初始化生成的 root 用户密码 sF#Hy,IuT6d#

root@ndb1:~# /usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql
2021-06-20T12:23:26.874302Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-06-20T12:23:27.102146Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-06-20T12:23:27.145317Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-06-20T12:23:27.154405Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 50a15854-d1c2-11eb-9792-000c29681e23.
2021-06-20T12:23:27.155927Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-06-20T12:23:28.339372Z 0 [Warning] CA certificate ca.pem is self signed.
2021-06-20T12:23:28.624534Z 1 [Note] A temporary password is generated for root@localhost: sF#Hy,IuT6d#

启动MySQL

/usr/local/mysql/bin/mysqld_safe --user=mysql &

修改 root 用户密码

mysqladmin -uroot -p'sF#Hy,IuT6d#' password '123456'

回到集群管理服务器查看集群状态,此时可以看到有一个 SQL 服务已经连接上了

root@mgm:/usr/local/bin# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 192.168.0.104)
id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17)

在另一台服务器(192.168.0.104)部署 SQL 服务,回到集群管理服务器查看集群状态,此时可以看到所有 SQL 服务已经连接成功

root@mgm:/usr/local/bin# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17)
id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17)

所有集群服务部署完毕,我们来测试一下集群是否真的部署成功

在 192.168.0.106 的 MySQL 上创建数据库和表

CREATE DATABASE `wechat`;
CREATE TABLE wechat.user (
Column1 varchar(100) NULL,
Column2 varchar(100) NULL
)
ENGINE=ndbcluster
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci;
插入数据并查看
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ndbinfo |
| performance_schema |
| sys |
| wechat |
+--------------------+
6 rows in set (0.00 sec)

mysql> select * from wechat.user;
Empty set (0.02 sec)

mysql> insert wechat.user (Column1, column2) value ('1', '2');
Query OK, 1 row affected (0.01 sec)

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1 | 2 |
+---------+---------+
1 row in set (0.00 sec)

在另一个 SQL 服务器查询,结果是成功的

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ndbinfo |
| performance_schema |
| sys |
| wechat |
+--------------------+
6 rows in set (0.00 sec)

mysql> select * from wechat.user;
Empty set (0.07 sec)

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1 | 2 |
+---------+---------+
1 row in set (0.00 sec)

现在我们把其中一个数据节点关掉,在管理服务器我们看到 ndbd已经关闭一个了

root@mgm:/usr/local/bin# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 (not connected, accepting connect from 192.168.0.106)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17)
id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17)

写入一笔数据

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1 | 2 |
+---------+---------+
1 row in set (0.01 sec)

mysql> insert into wechat.user (Column1, column2) value ('3', '4');
Query OK, 1 row affected (0.00 sec)

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 3 | 4 |
| 1 | 2 |
+---------+---------+
2 rows in set (0.00 sec)

在另一台 SQL 服务器查询,结果还是一致的

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 3 | 4 |
| 1 | 2 |
+---------+---------+
2 rows in set (0.00 sec)

我们再关闭 192.168.0.106 SQL服务

root@mgm:/usr/local/bin# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 (not connected, accepting connect from 192.168.0.106)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17)
id=5 (not connected, accepting connect from 192.168.0.106)

在 192.168.0.104 的 SQL 服务写入一笔数据

mysql> insert into wechat.user (Column1, column2) value ('5', '6');
Query OK, 1 row affected (0.00 sec)

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 5 | 6 |
| 3 | 4 |
| 1 | 2 |
+---------+---------+
3 rows in set (0.00 sec)

启动 192.168.0.106 的数据服务和SQL服务

root@mgm:/usr/local/bin# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17)
id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17)

在 192.168.0.106 查询数据库发现,发生故障期间产生的数据已经同步了过来

root@ndb1:~# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.33-ndb-7.6.17-cluster-gpl MySQL Cluster Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1 | 2 |
| 5 | 6 |
| 3 | 4 |
+---------+---------+
3 rows in set (0.08 sec)

数据库集群部署成功了,总结一下集群的注意事项

  1. 创建表的时候,需要设置ENGINE=ndbcluster,具体请看上面的建表脚本。
  2. 每个 SQL 服务需要创建一样的用户密码
  3. 管理服务器不能全部发生故障,否则集群数据库操作失败。
  4. 数据服务器不能全部发生故障,否则集群数据库操作失败。
  5. SQL 服务器发生故障期间建立的数据库,在恢复后不会自动同步新建数据库过来,需要手动在故障恢复后的服务器上创建同名数据库,之后数据才会自动同步过来。
  6. 只要管理服务器和数据服务器越多,故障发生时,才能保证数据安全的写入,才不会导致数据库系统不可用。
  7. SQL 服务器越多,把数据库访问的请求通过负载均衡服务分摊到各个 SQL 服务器,才能承受更多的并发量。
  8. 集群启动必须按照以下顺序依次启动,管理服务->数据服务->SQL服务。

以上就是如何搭建 MySQL 高可用高性能集群的详细内容,更多关于搭建 MySQL 高可用高性能集群的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
一篇文章弄懂MySQL查询语句的执行过程
May 07 MySQL
MySQL索引知识的一些小妙招总结
May 10 MySQL
浅谈mysql返回Boolean类型的几种情况
Jun 04 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
Aug 02 MySQL
MySQL子查询中order by不生效问题的解决方法
Aug 02 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
mysql的数据压缩性能对比详情
Nov 07 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
Nov 27 MySQL
一条 SQL 语句执行过程
Mar 17 MySQL
MySQL表锁、行锁、排它锁及共享锁的使用详解
Apr 02 MySQL
MySQL数据库配置信息查看与修改方法详解
Jun 25 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 #MySQL
分析mysql中一条SQL查询语句是如何执行的
MySQL如何使用使用Xtrabackup进行备份和恢复
Jun 21 #MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 #MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
Unity连接MySQL并读取表格数据的实现代码
新手入门Mysql--sql执行过程
You might like
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
Bootstrap3 图片(响应式图片&图片形状)
2017/01/04 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
在微信小程序中保存网络图片
2019/02/12 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
Python函数式编程指南(四):生成器详解
2015/06/24 Python
python 循环遍历字典元素的简单方法
2016/09/11 Python
详解python开发环境搭建
2016/12/16 Python
python实现控制台打印的方法
2019/01/12 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
Python初学者常见错误详解
2019/07/02 Python
python scrapy爬虫代码及填坑
2019/08/12 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
Python如何输出整数
2020/06/07 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
教师专业理论水平的自我评价分享
2013/11/09 职场文书
播音主持女孩的自我评价分享
2013/11/20 职场文书
教师个人剖析材料
2014/02/05 职场文书
初中同学会活动方案
2014/08/22 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
校长新学期致辞
2015/07/30 职场文书
详解MySQL的半同步
2021/04/22 MySQL