mysql分布式架构测试
mysql分布式架构测试
目录
机器准备
主机名称 | ip地址 | 作用 |
---|---|---|
mysql_test1 | 10.1.1.176 | 管理节点 |
mysql_test2 | 10.1.1.177 | SQL节点 |
mysql_test3 | 10.1.1.178 | SQL节点 |
podB | 10.1.1.172 | 数据节点 |
podC | 10.1.1.173 | 数据节点 |
mysql cluster介绍
Mysql cluster的数据更新使用读已提交隔离级别(read-committedisolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phasedcommit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)。
管理节点(MGM):这类节点的作用是管理MySQLCluster内的其他节点,如提供配置数据,并停止节点,运行备份等。由于这类节点负责管理其他节点的配置,应该在启动其他节点之前启动这类节点。MGM节点是用命令“ndb_mgmd”启动的。
数据节点(NDB):这类节点用于保存Cluster的数据,数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点,没有必要设定过多的副本,在NDB中数据会尽量的保存在内存中。数据节点使用命令“ndb”启动的;
SQL节点:这是用来访问Cluster数据的节点,对于MySQL Cluster,客户端节点是使用NDB Cluster存储引擎的传统MySQL服务器。通常,SQL节点使用命令“mysqld-ndbcluster”启动的;
MySQL cluster的复制原理
1.Master执行提交语句时,事务被发送到slave,slave开始准备事务的提交。
2.每个slave都要准备事务,然后向master发送OK(或ABORT)消息,表明事务已经准备好(或者无法准备该事务)。
3.Master等待所有Slave发送OK或ABORT消息,如果Master收到所有 Slave的OK消息,它就会向所有Slave发送提交消息,告诉Slave提交该事务;如果 Master收到来自任何一个Slave的ABORT消息,它就向所有 Slave发送ABORT消息,告诉Slave去中止事务。
4.每个Slave等待来自Master的OK或ABORT消息。如果Slave收到提交请求,它们就会提交事务,并向Master发送事务已提交 的确认;如果Slave收到取消请求,它们就会撤销所有改变并释放所占有的资源,从而中止事务,然后向Masterv送事务已中止的确认。
5.Master收到来自所有Slave的确认后,就会报告该事务被提交(或中止),然后继续进行下一个事务处理。
由于同步复制一共需要4次消息传递,故mysql cluster的数据更新速度比单机mysql要慢。所以mysql cluster要求运行在千兆以上的局域网内,节点可以采用双网卡,节点组之间采用直连方式。
下载安装包
官网地址:
下载地址:
通用节点执行项
cd /usr/local/src
wget https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64.tar.gz
tar -xf mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
mv mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64 mysql
安装管理节点
1、拷贝命令
cp mysql-cluster/bin/ndb* /usr/local/bin/
命令说明
#ndb_mgm,ndb客户端命令
#ndb_mgmd,ndb管理节点启动命令
#ndb_mgm是ndb_mgmd(MySQL Cluster Server)的客户端管理工具,通过它可以方便的检查Cluster
2、 配置文件
#创建数据库集群配置文件
mkdir /var/lib/mysql-cluster
cat>>/var/lib/mysql-cluster/config.ini<<EOF
[ndbd default]
NoOfReplicas=2 ##定义在Cluster环境中相同数据的份数,最大为4
DataMemory=2G ##每个数据节点中给数据分配的内存
IndexMemory=100M ##每个数据节点中给索引分配的内存
MaxNoOfAttributes=20480 ##该参数用于设置簇中触发程序对象的最大数目。该参数的默认值为768,不修改建表时可能会报708错误
[ndb_mgmd]
NodeId=1
datadir=/var/lib/mysql
HostName=10.1.1.176
[ndbd]
HostName=10.1.1.172
DataDir=/usr/local/mysql/data
NodeId=2
[ndbd]
HostName=10.1.1.173
DataDir=/usr/local/mysql/data
NodeId=3
[mysqld]
HostName=10.1.1.177
NodeId=4
[mysqld]
HostName=10.1.1.178
NodeId=5
#配置参数说明
[NDBD DEFAULT]:表示每个数据节点的默认配置,在每个节点的[NDBD]中不用再写这些选项,只能有一个。
NoOfReplicas:副本数量,数据节点数必须是副本数的整数倍。
[NDB_MGMD]:表示管理节点的配置,只有一个,默认的对其他节点的端口是1186,故服务器需要开放1186端口。
[NDBD]:表示每个数据节点的配置,可以有多个,分别写上不同数据节点的IP地址。
[MYSQLD]:表示SQL节点的配置,可以有多个,分别写上不同SQL节点的IP地址。
3、 启动管理节点
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
MySQL Cluster Management Server mysql-5.7.32 ndb-7.6.16
2023-02-16 13:40:15 [MgmtSrvr] WARNING -- at line 4: [DB] IndexMemory is deprecated, will use Number bytes on each ndbd(DB)
node allocated for storing indexes instead
特别注意:(#--initial:第一次启动时加上,其它时候不要加,不然会数据清空,除非是在备份、恢复或配置变化后重启时)
📌(#--initial:第一次启动时加上,其它时候不要加,不然会数据清空,除非是在备份、恢复或配置变化后重启时)
安装数据节点
1、添加配置文件
vim /etc/my.cnf
[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
character_set_server=utf8
default-storage-engine=ndbcluster
port=3306
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=10.1.1.176:1186
2、安装mysql数据库
##添加MySQL用户
groupadd mysql
useradd mysql -g mysql
##授权用户
cd /usr/local/mysql/
chown -R root .
##创建data目录,并把data目录设置所有者为mysql
mkdir data
chown -R mysql data
#把mysql的目录改成所属组为mysql
chgrp -R mysql .
3、初始化mysql
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
出现问题
原因:系统中缺少相应的依赖包
解决办法:
apt install libaio-dev
#初始成功提示
root@podC:/usr/local/mysql/bin# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
2023-02-20T07:48:55.535477Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2023-02-20T07:48:55.830272Z 0 [Warning] InnoDB: New log files created, LSN=45790
2023-02-20T07:48:55.874636Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2023-02-20T07:48:55.932568Z 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: 06ffd8da-b0f3-11ed-a20d-005056b68ebe.
2023-02-20T07:48:55.934077Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2023-02-20T07:48:56.732318Z 0 [Warning] CA certificate ca.pem is self signed.
2023-02-20T07:48:57.010025Z 1 [Note] A temporary password is generated for root@localhost: atlyOl9ktN+f
##其他可能出现的问题
cd /usr/local/mysql
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ 初始化无显示提示。
4、设置mysql服务开机自启动
cp support-files/mysql.server /etc/init.d/ ##mysql.server不用改名为mysqld
systemctl daemon-reload
##启动mysqld
systemctl start mysqld
##注意此刻启动的是mysqld,而不是MySQL,对应的启动文件为/etc/init.d/mysql.server
##查看mysqld状态
oot@podB:/etc/init.d# systemctl status mysqld.service
● mysqld.service
Loaded: not-found (Reason: No such file or directory)
Active: active (running) since Mon 2023-02-20 13:43:38 CST; 4h 55min ago
CGroup: /system.slice/mysqld.service
├─14368 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/podB.pid
└─14556 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/l
Feb 20 13:43:03 podB systemd[1]: Starting LSB: start and stop MySQL...
Feb 20 13:43:38 podB mysqld[14349]: Starting MySQL................................... *
Feb 20 13:43:38 podB systemd[1]: Started LSB: start and stop MySQL.
5、修改mysql密码
root@podB:/usr/local/mysql/bin# ./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.32-ndb-7.6.16-cluster-gpl
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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>set password for root@localhost = password('ytd2020')
6、启动数据节点
cd /usr/local/mysql
root@podB:/usr/local/mysql/bin# ./ndbd --initial
2023-02-21 09:37:28 [ndbd] INFO -- Angel connected to '10.1.1.176:1186'
2023-02-21 09:37:28 [ndbd] INFO -- Angel allocated nodeid: 2
特别注意:仅应在首次启动ndbd时,或在备份/恢复数据或配置文件发生变化后重启ndbd时使用“--initial”参数。因为该参数会使节点删除由早期ndbd实例创建的、用于恢复的任何文件,包括用于恢复的日志文件。
📌注意,仅应在首次启动ndbd时,或在备份/恢复数据或配置文件发生变化后重启ndbd时使用“--initial”参数。因为该参数会使节点删除由早期ndbd实例创建的、用于恢复的任何文件,包括用于恢复的日志文件。
配置安装sql节点
1、配置my.cnf文件
vim /etc/my.cnf
[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
character_set_server=utf8
default-storage-engine=ndbcluster
port=3306
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=10.1.1.176:1186
##添加用户
groupadd mysql
useradd mysql -g mysql
##授权
cd /usr/local/mysql/
chown -R root .
mkdir data
chown -R mysql data
chgrp -R mysql .
##安装依赖
cd /usr/local/mysql/bin
apt install libaio-dev
##初始化mysql
root@mysql_test2:/usr/local/mysql/bin# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
2023-02-21T01:51:26.488496Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2023-02-21T01:51:26.675047Z 0 [Warning] InnoDB: New log files created, LSN=45790
2023-02-21T01:51:26.709913Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2023-02-21T01:51:26.766154Z 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: 40b6898a-b18a-11ed-b845-005056b6220f.
2023-02-21T01:51:26.767294Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2023-02-21T01:51:27.937265Z 0 [Warning] CA certificate ca.pem is self signed.
2023-02-21T01:51:28.155398Z 1 [Note] A temporary password is generated for root@localhost: MistWZ/t9suM
2、加入开机自启动
cp support-files/mysql.server /etc/init.d/ ##mysql.server不用改名为mysqld
systemctl daemon-reload
systemctl start mysqld
root@mysql_test2:/usr/local/src# systemctl status mysqld.service
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/init.d/mysqld; bad; vendor preset: enabled)
Active: active (running) since Tue 2023-02-21 10:19:39 CST; 47s ago
Docs: man:systemd-sysv-generator(8)
Process: 21998 ExecStart=/etc/init.d/mysqld start (code=exited, status=0/SUCCESS)
Tasks: 32
Memory: 172.5M
CPU: 592ms
CGroup: /system.slice/mysqld.service
3、修改MySQL密码
./bin/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.32-ndb-7.6.16-cluster-gpl
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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.
set password for root@localhost = password('ytd2020');
4、管理节点查看集群状态
root@mysql_test1:/var/lib/mysql-cluster# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.1.1.172 (mysql-5.7.32 ndb-7.6.16, Nodegroup: 0, *)
id=3 @10.1.1.173 (mysql-5.7.32 ndb-7.6.16, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.1.1.176 (mysql-5.7.32 ndb-7.6.16)
[mysqld(API)] 2 node(s)
id=4 @10.1.1.177 (mysql-5.7.32 ndb-7.6.16)
id=5 @10.1.1.178 (mysql-5.7.32 ndb-7.6.16)
查看集群状态
集群的启动顺序为:管理节点》数据节点》SQL节点
集群停止顺序为:SQL节点》数据节点》管理节点
root@mysql_test1:/var/lib/mysql-cluster# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.1.1.172 (mysql-5.7.32 ndb-7.6.16, Nodegroup: 0, *)
id=3 @10.1.1.173 (mysql-5.7.32 ndb-7.6.16, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.1.1.176 (mysql-5.7.32 ndb-7.6.16)
[mysqld(API)] 2 node(s)
id=4 @10.1.1.177 (mysql-5.7.32 ndb-7.6.16)
id=5 @10.1.1.178 (mysql-5.7.32 ndb-7.6.16)
##表明集群正常
数据测试
sql节点插入数据
本次操作连接10.1.1.177机器插入数据
root@mysql_test2:/usr/local/src# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.32-ndb-7.6.16-cluster-gpl MySQL Cluster Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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> create database ytd_erp_test;
Query OK, 1 row affected (0.03 sec)
mysql> create database ytd_order_test;
Query OK, 1 row affected (0.05 sec)
mysql> use ytd_erp_test;
Database changed
mysql> create table sys_myfirst(id varchar(36) primary key, name varchar(100), memo varchar(255));
Query OK, 0 rows affected (0.10 sec)
mysql> insert into sys_myfirst(id, name, memo) values('1','test1','hello world!');
Query OK, 1 row affected (0.02 sec)
mysql> insert into sys_myfirst(id, name, memo) values('2','test2','hello world haha!');
Query OK, 1 row affected (0.00 sec)
mysql> insert into sys_myfirst(id, name, memo) values('3','test3','hello world hehe!');
Query OK, 1 row affected (0.00 sec)
mysql> select * from sys_myfirst;
+----+-------+-------------------+
| id | name | memo |
+----+-------+-------------------+
| 1 | test1 | hello world! |
| 3 | test3 | hello world hehe! |
| 2 | test2 | hello world haha! |
+----+-------+-------------------+
3 rows in set (0.00 sec)
mysql> select * from sys_myfirst;
+----+-------+-------------------+
| id | name | memo |
+----+-------+-------------------+
| 2 | test2 | hello world haha! |
| 1 | test1 | hello world! |
| 3 | test3 | hello world hehe! |
+----+-------+-------------------+
3 rows in set (0.00 sec)
##这里每次查找出来的数据顺序不一样,其原因不难想到是,查找的数据是两个数据库来回切换导致的。
在10.1.1.178中查询数据
root@mysql_test3:/usr/local/mysql# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.32-ndb-7.6.16-cluster-gpl MySQL Cluster Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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> use ytd_erp_test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
mysql> select * from sys_myfirst;
+----+-------+-------------------+
| id | name | memo |
+----+-------+-------------------+
| 1 | test1 | hello world! |
| 3 | test3 | hello world hehe! |
| 2 | test2 | hello world haha! |
+----+-------+-------------------+
3 rows in set (0.01 sec)
mysql>
mysql> select * from sys_myfirst;
+----+-------+-------------------+
| id | name | memo |
+----+-------+-------------------+
| 2 | test2 | hello world haha! |
| 1 | test1 | hello world! |
| 3 | test3 | hello world hehe! |
+----+-------+-------------------+
3 rows in set (0.01 sec)
mysql> SHOW ENGINES\G
*************************** 1. row ***************************
Engine: ndbcluster
Support: DEFAULT
Comment: Clustered, fault-tolerant tables
Transactions: YES
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: InnoDB
Support: YES
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 4. row ***************************
Engine: ndbinfo
Support: YES
Comment: MySQL Cluster system information storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 5. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 8. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 9. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
*************************** 10. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 11. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
##ndbcluster存储引擎已启用
mysql> CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER;
Query OK, 0 rows affected (0.16 sec)
mysql>
mysql> SHOW CREATE TABLE ctest \G
*************************** 1. row ***************************
Table: ctest
Create Table: CREATE TABLE `ctest` (
`i` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
管理节点查看各节点分配内存使用情况命令
ndb_mgm> ALL REPORT MEMORY
Node 2: Data usage is 0%(16 32K pages of total 68737)
Node 2: Index usage is 0%(7 32K pages of total 68728)
Node 3: Data usage is 0%(16 32K pages of total 68737)
Node 3: Index usage is 0%(7 32K pages of total 68728)
备份测试
在MySQL Cluster集群上,可以在管理节点上使用start backup
命令实现数据库的在线备份,在还原时可以使用ndb_restore
命令来进行数据库的还原。
mysql cluster类似于一种快照备份。
mysql cluster备份数据库可以生成三种格式的备份文件
- 元数据,表定义以及其他对象的元数据
BACKUP-backup-id.node_id.ctl ctl控制文件存储表定义以及其他对象的元数据(metadata)。
- data数据文件,保存的是表中的记录行,由于数据节点分片的原因,没有节点上文件的数据是不一致的。
BACKUP-backup-id.node_id.data data数据文件,保存的是表中的记录行,由于数据节点分片的原因,没有节点上文件的数据是不一致的。
- log日志,保存已提交的事物记录
BACKUP-backup-id.node_id.log log日志文件保存已提交的事物记录。
备份命令
START BACKUP [backup_id] [wait_option] [snapshot_option]
wait_option:
WAIT {STARTED | COMPLETED} | NOWAIT
snapshot_option:
SNAPSHOTSTART | SNAPSHOTEND
wait_option: 执行命令后是否将命令控制权返回给用户
- WAIT STARTED: 表示一旦备份开始,就把控制交给用户
- NOTWAIT: 表示用户一执行命令,就把控制权返回给用户
- WAIT COMPLETED: 表示需要等备份全部结束才把控制权交还给用户。默认选项
snapshot_option
- SNAPSHOTSTART: 表示备份文件的内容同开始备份时的数据库快照一致
- SNAPSHOTEND: 表示备份文件的内容同备份结束时的数据库快照一致,默认选项
##取消/中止备份命令
ABORT BACKUP
注意事项
对于大数据量的备份,调整以下参数:
在config.ini的[NDBD DEFAULT]或者[NDBD]组中调整参数
- BackupDataBufferSize:将数据写入磁盘之前用于对数据进行缓冲处理的内存量。
- BackupLogBufferSzie: 将日志记录写入磁盘之前用于对其进行缓冲处理的内存量。
- BackupMemory: 在数据库节点中为备份分配的总内存。它应是分配给备份数据缓冲的内存和分配给日志缓冲的内存之和。
- BackupWriteSize:每次写入磁盘的块大小,适用于备份数据缓冲和备份日志缓冲。
备份还原命令:
ndb_restore [-c connection_string] -n node_id -b backup_id [-m] -r --backup-path=/path/to/backup/files
##常用参数说明
--exclude-databases=list ##要排除的一个或多个数据库的列表(包括未命名的数据库)
--exclude-tables=list ##要排除的一个或多个表的列表(包括同一数据库中的表) 未命名);每个表引用必须包含 数据库名称
-r ##使用NDB API将表数据和日志还原到NDB群集中 (基于mysql5.7)
-m ##使用NDB API将元数据还原到NDB群集 (基于mysql5.7)
-n ##定义的节点ID
使用NDB_RESTORE初始化用于循环复制的NDB群集后,充当复制副本的SQL节点上的二进制日志不会自动创建,必须手动创建它们。要创建二进制日志,请在运行Start Slave之前在该SQL节点上发出一条show Tables语句。这是NDB群集中的已知问题。
备份测试
##开始备份
ndb_mgm> start backup
Waiting for completed, this may take several minutes
Node 2: Backup 1 started from node 1
Node 2: Backup 1 started from node 1 completed
StartGCP: 12258 StopGCP: 12261
#Records: 2065 #LogRecords: 0
Data: 52244 bytes Log: 0 bytes
ndb_mgm> start backup
Waiting for completed, this may take several minutes
Node 2: Backup 2 started from node 1
Node 2: Backup 2 started from node 1 completed
StartGCP: 12271 StopGCP: 12274
#Records: 2065 #LogRecords: 0
Data: 52244 bytes Log: 0 bytes
##查看备份目录
root@podC:/usr/local/mysql/data/BACKUP# ll
total 16
drwxr-x--- 4 root root 4096 Feb 21 17:29 ./
drwxr-xr-x 8 mysql mysql 4096 Feb 21 17:28 ../
drwxr-x--- 2 root root 4096 Feb 21 17:28 BACKUP-1/
drwxr-x--- 2 root root 4096 Feb 21 17:29 BACKUP-2/
root@podC:/usr/local/mysql/data/BACKUP/BACKUP-1# ll
total 64
drwxr-x--- 2 root root 4096 Feb 21 17:28 ./
drwxr-x--- 4 root root 4096 Feb 21 17:29 ../
-rw-r--r-- 1 root root 26316 Feb 21 17:28 BACKUP-1-0.3.Data
-rw-r--r-- 1 root root 23784 Feb 21 17:28 BACKUP-1.3.ctl
-rw-r--r-- 1 root root 52 Feb 21 17:28 BACKUP-1.3.log
备份和还原测试
##sql节点上面录入数据: 建立测试的数据库和表
mysql> CREATE DATABASE bg1;
Query OK, 1 row affected (0.03 sec)
mysql> use bg1;
Database changed
mysql>
mysql> CREATE TABLE bgt1 (id INT,`name` VARCHAR(20),PRIMARY KEY(`id`))ENGINE=NDBCLUSTER;
Query OK, 0 rows affected (0.12 sec)
mysql>
mysql> INSERT INTO bgt1 VALUES(1,'zhang1'),(2,'zhang2'),(3,'zhang3'),(4,'zhang4');
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
##管理节点开启备份
ndb_mgm> start backup 5
Waiting for completed, this may take several minutes
Node 2: Backup 5 started from node 1
Node 2: Backup 5 started from node 1 completed
StartGCP: 2399 StopGCP: 2402
#Records: 2074 #LogRecords: 0
Data: 52836 bytes Log: 0 bytes
##sql节点插入数据
mysql> INSERT INTO bgt1 VALUES(5,'zhang5'),(6,'zhang6');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> flush logs;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO bgt1 VALUES(7,'zhang7'),(8,'zhang8');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
##删掉SQL节点的数据。
mysql> drop database bg;
Query OK, 0 rows affected (0.05 sec)
##关闭MYSQLD服务器
root@mysql_test2:~# systemctl stop mysqld.service
root@mysql_test3:~# systemctl stop mysql.service
##重新启动管理节点
ndb_mgm> shutdown
Node 3: Cluster shutdown initiated
Node 2: Cluster shutdown initiated
Node 3: Node shutdown completed.
Node 2: Node shutdown completed.
3 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
ndb_mgm> exit
root@mysql_test1:~# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --reload
MySQL Cluster Management Server mysql-5.7.32 ndb-7.6.16
##重新启动数据节点
root@podB:/usr/local/mysql/bin# ./ndbd --initial
2023-02-23 09:14:53 [ndbd] INFO -- Angel connected to '10.1.1.176:1186'
2023-02-23 09:14:53 [ndbd] INFO -- Angel allocated nodeid: 2
root@podC:/usr/local/mysql/bin# ./ndbd --initial
2023-02-23 09:15:21 [ndbd] INFO -- Angel connected to '10.1.1.176:1186'
2023-02-23 09:15:21 [ndbd] INFO -- Angel allocated nodeid: 3
注意:此时数据节点重新加入时要添加—initial参数,不添加恢复数据会失败
📌注意:此时数据节点重新加入时要添加—initial参数,不添加恢复数据会失败。
##重新启动sql节点
root@mysql_test2:~# systemctl start mysqld.service
root@mysql_test3:~# systemctl start mysqld.service
##数据节点恢复数据
root@podB:/usr/local/mysql/bin# ./ndb_restore -n2 -b5 -m --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-5
Nodeid = 2
Backup Id = 5
backup path = /usr/local/mysql/data/BACKUP/BACKUP-5
2023-02-23 09:26:01 [restore_metadata] Read meta data file header
Opening file '/usr/local/mysql/data/BACKUP/BACKUP-4/BACKUP-5.2.ctl'
File size 25008 bytes
Backup version in files: ndb-6.3.11 ndb version: mysql-5.7.32 ndb-7.6.16
2023-02-23 09:26:01 [restore_metadata] Load content
Start GCP of Backup: 28188
Stop GCP of Backup: 28191
2023-02-23 09:26:01 [restore_metadata] Get number of Tables
2023-02-23 09:26:01 [restore_metadata] Validate Footer
Failed to initialize consumers
此时恢复报错
原因:由于集群备份恢复基于ndb_restore工具作为自己的 api 节点进行连接,因此需要单独定义一个api插槽供其使用。
定义一个额外的 api 节点插槽,或者只是停止 数据节点mysql 以释放已经定义的插槽。
[ndbd default]
NoOfReplicas=2
DataMemory=2G
IndexMemory=100M
[ndb_mgmd]
NodeId=1
datadir=/var/lib/mysql
HostName=10.1.1.176
[ndbd]
HostName=10.1.1.172
DataDir=/usr/local/mysql/data
NodeId=2
[ndbd]
HostName=10.1.1.173
DataDir=/usr/local/mysql/data
NodeId=3
[mysqld]
HostName=10.1.1.177
NodeId=4
[mysqld]
HostName=10.1.1.178
NodeId=5
[mysqld]
##添加红色标记部分
数据节点恢复测试,问题依旧。
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.1.1.172 (mysql-5.7.32 ndb-7.6.16, Nodegroup: 0, *)
id=3 @10.1.1.173 (mysql-5.7.32 ndb-7.6.16, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.1.1.176 (mysql-5.7.32 ndb-7.6.16)
[mysqld(API)] 3 node(s)
id=4 @10.1.1.177 (mysql-5.7.32 ndb-7.6.16)
id=5 @10.1.1.178 (mysql-5.7.32 ndb-7.6.16)
id=6 @10.1.1.173 (mysql-5.7.32 ndb-7.6.16)
#检查发现数据节点存在mysqld,停止mysqld后进行测试
##由于数据分散在各个数据节点,所以,需要在每个数据节点恢复数据
root@podB:/usr/local/mysql/bin# ./ndb_restore -n2 -b5 -r -m --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-5
Nodeid = 2
Backup Id = 5
backup path = /usr/local/mysql/data/BACKUP/BACKUP-5
2023-02-23 11:10:51 [restore_metadata] Read meta data file header
Opening file '/usr/local/mysql/data/BACKUP/BACKUP-5/BACKUP-5.2.ctl'
File size 26868 bytes
Backup version in files: ndb-6.3.11 ndb version: mysql-5.7.32 ndb-7.6.16
2023-02-23 11:10:51 [restore_metadata] Load content
Start GCP of Backup: 2399
Stop GCP of Backup: 2402
2023-02-23 11:10:51 [restore_metadata] Get number of Tables
2023-02-23 11:10:51 [restore_metadata] Validate Footer
Connected to ndb!!
2023-02-23 11:10:52 [restore_metadata] Restore objects (tablespaces, ..)
2023-02-23 11:10:52 [restore_metadata] Restoring tables
Successfully restored table `ytd_erp_test/def/City`
Successfully restored table event REPL$ytd_erp_test/City
Successfully restored table `ytd_erp_test/def/bgt1`
Successfully restored table event REPL$ytd_erp_test/bgt1
Successfully restored table `bg1/def/bgt1`
Successfully restored table event REPL$bg1/bgt1
2023-02-23 11:10:52 [restore_metadata] Save foreign key info
Successfully created index `PRIMARY` on `bgt1`
Successfully created index `PRIMARY` on `bgt1`
Successfully created index `PRIMARY` on `City`
Create foreign keys
Create foreign keys done
2023-02-23 11:10:52 [restore_data] Start restoring table data
2023-02-23 11:10:52 [restore_data] Read data file header
Opening file '/usr/local/mysql/data/BACKUP/BACKUP-5/BACKUP-5-0.2.Data'
File size 26892 bytes
2023-02-23 11:10:52 [restore_data] Restore fragments
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_sample(8) fragment 0
Skipping fragment
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0(3) fragment 0
Skipping fragment
_____________________________________________________
Processing data in table: ytd_erp_test/def/City(11) fragment 0
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status(6) fragment 0
Skipping fragment
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_head(7) fragment 0
Skipping fragment
_____________________________________________________
Processing data in table: ytd_erp_test/def/bgt1(14) fragment 0
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_4_3(5) fragment 0
Skipping fragment
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0(2) fragment 0
_____________________________________________________
Processing data in table: bg1/def/bgt1(10) fragment 0
_____________________________________________________
Processing data in table: mysql/def/ndb_schema(4) fragment 0
Skipping fragment
2023-02-23 11:10:52 [restore_log] Read log file header
Opening file '/usr/local/mysql/data/BACKUP/BACKUP-5/BACKUP-5.2.log'
File size 52 bytes
2023-02-23 11:10:52 [restore_log] Restore log entries
Restored 3 tuples and 0 log entries
root@podC:/usr/local/mysql/bin# ./ndb_restore -n3 -b5 -r -m --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-5
Nodeid = 3
Backup Id = 5
backup path = /usr/local/mysql/data/BACKUP/BACKUP-5
2023-02-23 10:31:50 [restore_metadata] Read meta data file header
Opening file '/usr/local/mysql/data/BACKUP/BACKUP-5/BACKUP-5.3.ctl'
File size 25008 bytes
Backup version in files: ndb-6.3.11 ndb version: mysql-5.7.32 ndb-7.6.16
2023-02-23 10:31:50 [restore_metadata] Load content
Start GCP of Backup: 28188
Stop GCP of Backup: 28191
2023-02-23 10:31:50 [restore_metadata] Get number of Tables
2023-02-23 10:31:50 [restore_metadata] Validate Footer
Connected to ndb!!
2023-02-23 10:31:51 [restore_metadata] Restore objects (tablespaces, ..)
2023-02-23 10:31:51 [restore_metadata] Restoring tables
Create table `bg/def/bgt1` failed: 721: Schema object with given name already exists
Restore: Failed to restore table: `bg/def/bgt1` ... Exiting
出现报错
原因:由于在数据节点(podB)中已经恢复了元数据,所以,其他节点恢复数据时不需要-m参数
root@podC:/usr/local/mysql/bin# ./ndb_restore -n3 -b5 -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-5
Nodeid = 3
Backup Id = 5
backup path = /usr/local/mysql/data/BACKUP/BACKUP-5
2023-02-23 11:12:52 [restore_metadata] Read meta data file header
Opening file '/usr/local/mysql/data/BACKUP/BACKUP-5/BACKUP-5.3.ctl'
File size 26868 bytes
Backup version in files: ndb-6.3.11 ndb version: mysql-5.7.32 ndb-7.6.16
2023-02-23 11:12:52 [restore_metadata] Load content
Start GCP of Backup: 2399
Stop GCP of Backup: 2402
2023-02-23 11:12:52 [restore_metadata] Get number of Tables
2023-02-23 11:12:52 [restore_metadata] Validate Footer
Connected to ndb!!
2023-02-23 11:12:52 [restore_metadata] Restore objects (tablespaces, ..)
2023-02-23 11:12:52 [restore_metadata] Restoring tables
2023-02-23 11:12:52 [restore_metadata] Save foreign key info
2023-02-23 11:12:52 [restore_data] Start restoring table data
2023-02-23 11:12:52 [restore_data] Read data file header
Opening file '/usr/local/mysql/data/BACKUP/BACKUP-5/BACKUP-5-0.3.Data'
File size 26600 bytes
2023-02-23 11:12:52 [restore_data] Restore fragments
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_sample(8) fragment 1
Skipping fragment
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0(3) fragment 1
Skipping fragment
_____________________________________________________
Processing data in table: ytd_erp_test/def/City(11) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status(6) fragment 1
Skipping fragment
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_head(7) fragment 1
Skipping fragment
_____________________________________________________
Processing data in table: ytd_erp_test/def/bgt1(14) fragment 1
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_4_3(5) fragment 1
Skipping fragment
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0(2) fragment 1
_____________________________________________________
Processing data in table: bg1/def/bgt1(10) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_schema(4) fragment 1
Skipping fragment
2023-02-23 11:12:52 [restore_log] Read log file header
Opening file '/usr/local/mysql/data/BACKUP/BACKUP-5/BACKUP-5.3.log'
File size 52 bytes
2023-02-23 11:12:52 [restore_log] Restore log entries
Restored 9 tuples and 0 log entries
##sql节点查看数据
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ndbinfo |
| performance_schema |
| sys |
| ytd_erp_test |
| ytd_order_test |
+--------------------+
7 rows in set (0.00 sec)
##没有库,需要重新建库。
mysql> create database bg1;
Query OK, 1 row affected (0.06 sec)
mysql> use bg1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
mysql> show tables;
+---------------+
| Tables_in_bg1 |
+---------------+
| bgt1 |
+---------------+
1 row in set (0.00 sec)
mysql> select * from bgt1;
+----+--------+
| id | name |
+----+--------+
| 1 | zhang1 |
| 2 | zhang2 |
| 4 | zhang4 |
| 3 | zhang3 |
+----+--------+
4 rows in set (0.01 sec)
##建库后查询数据恢复
数据引擎测试
1、查看节点数据库
##节点2
root@mysql_test2:~# 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.32-ndb-7.6.16-cluster-gpl MySQL Cluster Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bg1 |
| mysql |
| ndbinfo |
| performance_schema |
| sys |
| ytd_erp_test |
| ytd_order_test |
+--------------------+
8 rows in set (0.00 sec)
##节点3
root@mysql_test3:~# 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.32-ndb-7.6.16-cluster-gpl MySQL Cluster Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bg1 |
| mysql |
| ndbinfo |
| performance_schema |
| sys |
| ytd_erp_test |
| ytd_order_test |
+--------------------+
8 rows in set (0.00 sec)
非 NDB 存储引擎
##节点2执行
mysql> use ytd_erp_test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
mysql> create table t1 (id int,name char(10)) engine=innodb;
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 (id,name) values(1,'a'),(2,'b');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t1;
+------+------+
| id | name |
+------+------+
| 1 | a |
| 2 | b |
+------+------+
2 rows in set (0.00 sec)
##节点3查询数据
mysql> use ytd_erp_test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> select * from t1;
ERROR 1146 (42S02): Table 'ytd_erp_test.t1' doesn't exist
对于 InnoDB 存储引擎的表 MySQL Cluster 集群环境不支持同步功能。
NDB 存储引擎
##节点2上建表
mysql> create table t2 (id int,name char(10)) engine=ndb;
Query OK, 0 rows affected (0.16 sec)
mysql>
mysql> insert into t2(id,name) values(1,'a'),(2,'b');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql>
mysql> select * from t2;
+------+------+
| id | name |
+------+------+
| 1 | a |
| 2 | b |
+------+------+
2 rows in set (0.00 sec)
##节点3执行
mysql> select * from t2;
+------+------+
| id | name |
+------+------+
| 2 | b |
| 1 | a |
+------+------+
2 rows in set (0.01 sec)
##NDB引擎正常同步
mysql> update t2 set name='bbb' where id=2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
##节点2查询
mysql> select * from t2;
+------+------+
| id | name |
+------+------+
| 2 | bbb |
| 1 | a |
+------+------+
2 rows in set (0.00 sec)
系统优化项
为了连接方便,MySQL加入到环境变量中
vim /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
source /etc/profile
日志管理
MySQL Cluster 集群日志主要分为集群日志、节点日志:
- 集群日志文件存储于管理节点上,用来记录整个集群的运行情况,如各个节点的连通性等,以及所有节点的运行情况。
- 节点日志文件存储于单独的某个节点上,只是用来记录本地节点上的服务运行情况
集群日志文件
集群日志文件默认位于管理节点上的 datadir 目录下
[ndb_mgmd]
NodeId=1
datadir=/var/lib/mysql
HostName=10.1.1.176
root@mysql_test1:/var/lib/mysql# ll /var/lib/mysql
-rw-r--r-- 1 root root 717191 Feb 23 13:57 ndb_1_cluster.log
-rw-r--r-- 1 root root 1000154 Feb 21 19:41 ndb_1_cluster.log.1
-rw-r--r-- 1 root root 1000224 Feb 21 23:22 ndb_1_cluster.log.2
-rw-r--r-- 1 root root 1000224 Feb 22 03:03 ndb_1_cluster.log.3
-rw-r--r-- 1 root root 1000224 Feb 22 06:44 ndb_1_cluster.log.4
-rw-r--r-- 1 root root 1000106 Feb 22 12:39 ndb_1_cluster.log.5
-rw-r--r-- 1 root root 312 Feb 23 13:56 ndb_1_out.log
##查卡日志
root@mysql_test1:/var/lib/mysql# tail -50 ndb_1_cluster.log
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: Restore Database from disk Completed
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: Start phase 4 completed (system restart)
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 3: Start phase 4 completed (system restart)
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: Make On-line Database recoverable by waiting for LCP Starting, LCP id = 3
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: Local checkpoint 3 started. Keep GCI = 1 oldest restorable GCI = 2
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: LDM(0): Completed LCP, #frags = 22 #records = 2076, #bytes = 69388
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 3: LDM(0): Completed LCP, #frags = 22 #records = 2076, #bytes = 69388
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: Local checkpoint 3 completed
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: Make On-line Database recoverable by waiting for LCP Completed, LCP id = 3
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: Start phase 5 completed (system restart)
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 3: Start phase 5 completed (system restart)
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: Start phase 6 completed (system restart)
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 3: Start phase 6 completed (system restart)
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: President restarts arbitration thread [state=1]
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: Start phase 7 completed (system restart)
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 3: Start phase 7 completed (system restart)
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: Start phase 8 completed (system restart)
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 3: Start phase 8 completed (system restart)
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 2: Node 1: API mysql-5.7.32 ndb-7.6.16
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 3: Node 1: API mysql-5.7.32 ndb-7.6.16
2023-02-23 13:57:03 [MgmtSrvr] INFO -- Node 3: Prepare arbitrator node 1 [ticket=5c29000166adfb0a]
2023-02-23 13:57:04 [MgmtSrvr] INFO -- Node 2: Started arbitrator node 1 [ticket=5c29000166adfb0a]
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 3: Start phase 9 completed (system restart)
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 2: Start phase 9 completed (system restart)
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 2: Start phase 50 completed (system restart)
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 3: Start phase 50 completed (system restart)
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 2: Start phase 101 completed (system restart)
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 3: Start phase 101 completed (system restart)
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 2: Started (mysql-5.7.32 ndb-7.6.16)
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 3: Started (mysql-5.7.32 ndb-7.6.16)
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 3: Communication to Node 4 opened
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 3: Communication to Node 5 opened
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 3: Communication to Node 6 opened
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 2: Communication to Node 4 opened
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 2: Communication to Node 5 opened
2023-02-23 13:57:05 [MgmtSrvr] INFO -- Node 2: Communication to Node 6 opened
2023-02-23 13:57:25 [MgmtSrvr] INFO -- Alloc node id 4 succeeded
2023-02-23 13:57:25 [MgmtSrvr] INFO -- Nodeid 4 allocated for API at 10.1.1.177
2023-02-23 13:57:25 [MgmtSrvr] INFO -- Node 4: mysqld --server-id=0
2023-02-23 13:57:26 [MgmtSrvr] INFO -- Node 3: Node 4 Connected
2023-02-23 13:57:26 [MgmtSrvr] INFO -- Node 2: Node 4 Connected
2023-02-23 13:57:26 [MgmtSrvr] INFO -- Node 2: Node 4: API mysql-5.7.32 ndb-7.6.16
2023-02-23 13:57:26 [MgmtSrvr] INFO -- Node 3: Node 4: API mysql-5.7.32 ndb-7.6.16
2023-02-23 13:57:34 [MgmtSrvr] INFO -- Alloc node id 5 succeeded
2023-02-23 13:57:34 [MgmtSrvr] INFO -- Nodeid 5 allocated for API at 10.1.1.178
2023-02-23 13:57:34 [MgmtSrvr] INFO -- Node 5: mysqld --server-id=0
2023-02-23 13:57:35 [MgmtSrvr] INFO -- Node 2: Node 5 Connected
2023-02-23 13:57:35 [MgmtSrvr] INFO -- Node 3: Node 5 Connected
2023-02-23 13:57:35 [MgmtSrvr] INFO -- Node 2: Node 5: API mysql-5.7.32 ndb-7.6.16
2023-02-23 13:57:35 [MgmtSrvr] INFO -- Node 3: Node 5: API mysql-5.7.32 ndb-7.6.16
##可以集群日志文件中记录了每个数据节点及每个 SQL 节点的运行情况
##关于集群日志命令
clusterlog off:关闭集群日志功能
clusterlog on:开启集群日志功能
clusterlog info:查看当前日志级别
日志级别 | 事件定义 |
---|---|
ALERT | 应立刻更正的情况,如损坏的系统数据库 |
CRITICAL | 临界状况,如设备错误或资源不足 |
ERROR | 应予以更正的状况,如配置错误 |
WARNING | 不能称为错误的情况,但仍需要特别处理 |
INFO | 通报性信息 |
DEBUG | 调试信息 |
默认日志级别
ndb_mgm> clusterlog info
Severities enabled: INFO WARNING ERROR CRITICAL ALERT
节点日志文件
root@podB:/usr/local/mysql/data# tail -30 ndb_2_out.log
2023-02-23 13:57:03 [ndbd] INFO -- Start phase 5 completed
2023-02-23 13:57:03 [ndbd] INFO -- Phase 5 waited for local checkpoint to complete
2023-02-23 13:57:03 [ndbd] INFO -- Grant nodes to start phase: 6, nodes: 000000000000000c
2023-02-23 13:57:03 [ndbd] INFO -- Start phase 6 completed
2023-02-23 13:57:03 [ndbd] INFO -- Phase 6 updated blocks about that we've now reached the started state.
2023-02-23 13:57:03 [ndbd] INFO -- Grant nodes to start phase: 7, nodes: 000000000000000c
2023-02-23 13:57:03 [ndbd] INFO -- President restarts arbitration thread [state=1]
2023-02-23 13:57:03 [ndbd] INFO -- Activating bucket 0 in SUMA
2023-02-23 13:57:03 [ndbd] INFO -- Start phase 7 completed
2023-02-23 13:57:03 [ndbd] INFO -- Phase 7 mainly activated the asynchronous change events process, and some other background processes
2023-02-23 13:57:03 [ndbd] INFO -- Grant nodes to start phase: 8, nodes: 000000000000000c
2023-02-23 13:57:03 [ndbd] INFO -- Start NDB start phase 7
2023-02-23 13:57:03 [ndbd] INFO -- Foreign Key enabling Starting
2023-02-23 13:57:03 [ndbd] INFO -- Foreign key enabling Completed
2023-02-23 13:57:03 [ndbd] INFO -- NDB start phase 7 completed
2023-02-23 13:57:03 [ndbd] INFO -- Start phase 8 completed
2023-02-23 13:57:03 [ndbd] INFO -- Phase 8 enabled foreign keys and waited forall nodes to complete start up to this point
2023-02-23 13:57:03 [ndbd] INFO -- Grant nodes to start phase: 9, nodes: 000000000000000c
2023-02-23 13:57:04 [ndbd] INFO -- Started arbitrator node 1 [ticket=5c29000166adfb0a]
2023-02-23 13:57:05 [ndbd] INFO -- Restart complete, updated local sysfile
2023-02-23 13:57:05 [ndbd] INFO -- Start phase 9 completed
2023-02-23 13:57:05 [ndbd] INFO -- Phase 9 enabled APIs to start connecting
2023-02-23 13:57:05 [ndbd] INFO -- Grant nodes to start phase: 10, nodes: 000000000000000c
2023-02-23 13:57:05 [ndbd] INFO -- Start phase 50 completed
2023-02-23 13:57:05 [ndbd] INFO -- Grant nodes to start phase: 51, nodes: 000000000000000c
2023-02-23 13:57:05 [ndbd] INFO -- Start phase 101 completed
2023-02-23 13:57:05 [ndbd] INFO -- Phase 101 was used by SUMA to take over responsibility for sending some of the asynchronous change events
2023-02-23 13:57:05 [ndbd] INFO -- Grant nodes to start phase: 102, nodes: 000000000000000c
2023-02-23 13:57:05 [ndbd] INFO -- Node started
2023-02-23 13:57:26 [ndbd] INFO -- Allocate event buffering page chunk in SUMA, 16 pages, first page ref = 3366
扩展项
使用MySQL的应用程序可以使用标准API来访问NDB表。重要的是 请记住,应用程序必须访问 SQL 节点,而不是管理或数据节点。
管理节点配置文件选项
Arbitration: 应如何进行仲裁以避免脑裂 节点发生故障时的问题。
ArbitrationTimeout: 数据库分区等待的最长时间(毫秒) 仲裁信号。
BackupDataBufferSize: 用于备份的数据缓冲区的默认大小(以字节为单位)。
BackupDataDir: 存储备份的位置的路径。请注意字符串“/备份” 始终附加到此设置,以便 *有效* 默认值为 FileSystemPath/BACKUP。
BackupDiskWriteSpeedPct: 设置数据节点分配的最大写入速度的百分比 (MaxDiskWriteSpeed) 在启动时为 LCP 保留 备份。
BackupLogBufferSize: 用于备份的日志缓冲区的默认大小(以字节为单位)。
BackupMaxWriteSize: 备份进行的文件系统写入的最大大小(在 字节)。
BackupMemory: 为每个节点的备份分配的总内存(以字节为单位)。
BackupReportFrequency: 备份期间备份状态报告的频率(以秒为单位)。
BackupWriteSize: 备份进行的文件系统写入的默认大小(在 字节)。
BatchSizePerLocalScan: 用于计算保留扫描的锁定记录数 锁。
BuildIndexThreads: 用于构建有序索引的线程数 系统或节点重新启动。在运行时也适用 ndb_restore --重建索引。将此参数设置为 0 禁用有序索引的多线程构建。
CompressedBackup: 使用 zlib 在写入备份时压缩备份。
CompressedLCP: 使用 zlib 编写压缩的 LCP。
ConnectCheckIntervalDelay: 数据节点连接检查阶段之间的时间。数据节点 1 间隔后被视为可疑,2 后死亡 没有响应的间隔。
CrashOnCorruptedTuple: 启用后,每当检测到节点时,都会强制节点关闭 损坏的元组。
DataDir: 此节点的数据目录。
DataMemory: 每个数据节点上分配用于存储的字节数 数据;取决于可用的系统 RAM 和大小 索引内存。
DefaultHashMapSize: 设置大小(以存储桶为单位)以用于表哈希映射。三 支持的值:0、240 和 3840。
DictTrace: 启用 DBDICT 调试;用于新开发银行的发展。
DiskIOThreadPool: 用于文件访问的未绑定线程数,适用于磁盘 仅数据。
Diskless: 在不使用磁盘的情况下运行。
DiskPageBufferEntries: 要在 DiskPageBufferMemory 中分配的内存;非常大的磁盘 事务可能需要增加此值。
DiskPageBufferMemory: 为磁盘页面分配的每个数据节点上的字节数 缓冲区缓存。
DiskSyncSize: 在强制同步之前写入文件的数据量。
EnablePartialLcp: 启用部分 LCP(真);如果禁用(假),则全部 LCP 写入完整的检查点。
EnableRedoControl: 启用自适应检查点速度以控制重做日志 用法。
EventLogBufferSize: 数据中NDB日志事件的循环缓冲区的大小 节点。
ExecuteOnComputer: 引用前面定义的计算机的字符串。
ExtraSendBufferMemory: 除了任何已分配的内存外,还用于发送缓冲区 通过 TotalSendBufferMemory 或 SendBufferMemory。默认 (0) 允许最大 16MB。
FileSystemPath: 数据节点存储其数据的目录的路径(目录 必须存在)。
FileSystemPathDataFiles: 数据节点存储其磁盘数据的目录的路径 文件。默认值为文件系统路径DD(如果已设置);否则 如果设置了文件系统路径,则使用它;否则,值 使用数据目录。
FileSystemPathDD: 数据节点存储其磁盘数据的目录的路径,以及 撤消文件。默认值为文件系统路径(如果已设置); 否则,将使用 DataDir 的值。
FileSystemPathUndoFiles: 数据节点存储其撤消文件的目录的路径 磁盘数据。默认值为文件系统路径DD(如果已设置); 否则,如果设置了文件系统路径,则使用它;否则 使用数据目录的值。
FragmentLogFileSize: 每个重做日志文件的大小。
HeartbeatIntervalDbApi: API 节点-数据节点检测信号之间的时间。(接口连接 错过 3 次心跳后关闭)。
HeartbeatIntervalDbDb: 数据节点到数据节点心跳之间的时间;数据节点 在错过 3 次心跳后被认为是死亡的。
HeartbeatOrder: 设置数据节点相互检查检测信号的顺序 用于确定给定节点是否仍处于活动状态,并且 已连接到群集。对于所有数据节点,必须为零,或者 所有数据节点的不同非零值;看 文档以获取进一步指导。
HostName: 此数据节点的主机名或 IP 地址。
IndexMemory: 每个数据节点上分配用于存储的字节数 指标;取决于可用的系统 RAM 和大小 数据内存。
IndexStatAutoCreate: 索引时启用/禁用自动统计信息收集 被创建。
IndexStatAutoUpdate: 监控索引的变化并触发自动统计 更新。
IndexStatSaveScale: 用于确定存储索引大小的比例因子 统计学。
IndexStatSaveSize: 每个索引保存的统计信息的最大大小(以字节为单位)。
IndexStatTriggerPct: 索引的 DML 操作中的阈值百分比变化 统计信息更新。价值按比例缩小 IndexStatTriggerScale.
IndexStatTriggerScale: 将 IndexStatTriggerPct 缩减此数量,再乘以 索引大小的底数为 2,用于大索引。设置为 0 到 禁用缩放。
IndexStatUpdateDelay: 自动索引统计信息更新之间的最小延迟 给定索引。0 表示无延迟。
InitFragmentLogFiles: 使用稀疏或完整格式初始化片段日志文件。
InitialLogFileGroup: 描述在初始期间创建的日志文件组 开始。有关格式,请参阅文档。
InitialNoOfOpenFiles: 每个数据节点打开的初始文件数。(一个线程是 按文件创建)。
InitialTablespace: 描述在初始启动期间创建的表空间。 有关格式,请参阅文档。
InsertRecoveryWork: 用于插入行的恢复工作百分比;没有 除非使用部分本地检查点,否则效果。
LateAlloc: 连接到管理服务器后分配内存 已经成立。
LcpScanProgressTimeout: 本地检查点片段扫描可以达到的最长时间 在节点关闭之前停止,以确保系统范围的 LCP 进展。使用 0 禁用。
LockExecuteThreadToCPU: 以逗号分隔的 CPU ID 列表。
LockMaintThreadsToCPU: 指示哪个 CPU 运行维护线程的 CPU ID。
LockPagesInMainMemory: 0=禁用锁定,1=内存分配后锁定,2=锁定 在内存分配之前。
LogLevelCheckpoint: 打印的本地和全局检查点信息的日志级别 到标准输出。
LogLevelCongestion: 打印到标准输出的拥塞信息级别。
LogLevelConnection: 打印到的节点连接/断开连接信息的级别 标准输出。
LogLevelError: 传输器,心跳错误打印到标准输出。
LogLevelInfo: 打印到标准输出的检测信号和日志信息。
LogLevelNodeRestart: 打印的节点重启级别和节点故障信息 到标准输出。
LogLevelShutdown: 打印到 stdout 的节点关闭信息级别。
LogLevelStartup: 打印到 stdout 的节点启动信息的级别。
LogLevelStatistic: 事务、操作和传输器信息的级别 打印到标准输出。
LongMessageBuffer: 在每个数据节点上为内部分配的字节数 长消息。
MaxAllocate: 不再使用;没有效果。
MaxBufferedEpochs: 允许订阅节点可能滞后的纪元编号 落后(未处理的纪元)。超出导致滞后 要断开连接的订阅者。
MaxBufferedEpochBytes: 为缓冲纪元分配的总字节数。
MaxDiskWriteSpeed: 每秒可写入的最大字节数 LCP 和备份(未进行重新启动)。
MaxDiskWriteSpeedOtherNodeRestart: 每秒可写入的最大字节数 LCP 和备份,当另一个节点重新启动时。
MaxDiskWriteSpeedOwnRestart: 每秒可写入的最大字节数 此节点重新启动时的 LCP 和备份。
MaxFKBuildBatchSize: 用于生成外键的最大扫描批大小。 增加此值可能会加快外键的生成速度 但也会影响正在进行的流量。
MaxDMLOperationsPerTransaction: 限制交易规模;如果需要,中止事务 不止这么多 DML 操作。
MaxLCPStartDelay: LCP 轮询检查点互斥锁的时间(以秒为单位) 允许其他数据节点完成元数据 同步),在将自身置于锁定队列之前 并行恢复表数据。
MaxNoOfAttributes: 建议数据库中存储的属性总数(总和 在所有表上)。
MaxNoOfConcurrentIndexOperations: 可以执行的索引操作总数 同时在一个数据节点上。
MaxNoOfConcurrentOperations: 事务中的最大操作记录数 协调者。
MaxNoOfConcurrentScans: 在数据节点上并发执行的最大扫描数。
MaxNoOfConcurrentSubOperations: 最大并发订阅者操作数。
MaxNoOfConcurrentTransactions: 并发执行的最大事务数 此数据节点,可以 并发执行是此值乘以数据数 群集中的节点。
MaxNoOfFiredTriggers: 可以同时触发一个触发器的总数 数据节点。
MaxNoOfLocalOperations: 在此数据上定义的最大操作记录数 节点。
MaxNoOfLocalScans: 对此数据并行扫描的最大碎片数 节点。
MaxNoOfOpenFiles: 每个数据节点打开的最大文件数。(一个线程是 按文件创建)。
MaxNoOfOrderedIndexes: 可在 中定义的有序索引总数 系统。
MaxNoOfSavedMessages: 要在错误日志中写入的最大错误消息数和 要保留的最大跟踪文件数。
MaxNoOfSubscribers: 最大订阅者数。
MaxNoOfSubscriptions: 最大订阅数(默认值 0 = 最大表数)。
MaxNoOfTables: 建议数据库中存储的NDB表总数。
MaxNoOfTriggers: 可在系统中定义的触发器总数。
MaxNoOfUniqueHashIndexes: 可在 中定义的唯一哈希索引总数 系统。
MaxParallelCopyInstances: 节点重新启动期间的并行副本数。默认值为 0,在两个节点上使用 LDM 数,最大值为 16.
MaxParallelScansPerFragment: 每个片段的最大并行扫描数。一旦这个 达到限制,扫描被序列化。
MaxReorgBuildBatchSize: 用于重组表的最大扫描批大小 分区。增加此值可能会加快表 分区重组,但影响正在进行的流量,因为 井。
MaxStartFailRetries: 数据节点在启动时失败时的最大重试次数,需要 停止错误 = 0。设置为 0 会导致启动尝试 无限期地继续。
MaxUIBuildBatchSize: 用于构建唯一密钥的最大扫描批大小。 增加此值可能会加快唯一键的生成速度,但 也会影响正在进行的流量。
MemReportFrequency: 内存报告的频率(以秒为单位);0 = 仅在以下情况下报告 超出百分比限制。
MinDiskWriteSpeed: 每秒可写入的最小字节数 LCP 和备份。
MinFreePct: 要保留的内存资源百分比 重新 启动。
NodeGroup: 数据节点所属的节点组;仅在以下期间使用群集的初始启动。
NodeId: 集群中所有节点中唯一标识数据节点的编号簇。
NoOfFragmentLogFiles: 16 个文件集中每个文件中的 4 MB 重做日志文件数 属于数据节点。
NoOfReplicas: 数据库中所有数据的副本数。
Numa: (仅限 Linux;需要 libnuma)控制 NUMA 支持。 设置为 0 允许系统确定交错的使用 通过数据节点过程;1表示由数据决定 节点。
ODirect: 尽可能使用O_DIRECT文件读取和写入。
ODirectSyncFlag: O_DIRECT写入被视为同步写入;忽视 如果未启用 ODirect,则 InitFragmentLogFiles 设置为 稀疏,或两者兼而有之。
RealtimeScheduler: 如果为 true,则数据节点线程被调度为实时 线程。默认值为假。
RecoveryWork: LCP 文件的存储开销百分比:更大的价值 意味着正常操作中的工作量更少,在操作期间工作更多 恢复。
RedoBuffer: 分配给写入重做的每个数据节点上的字节数 原木。
RedoOverCommitCounter: 当 RedoOverCommitLimit 被多次超过时, 事务中止,操作处理方式为 由 DefaultOperationRedoProblemAction 指定。
RedoOverCommitLimit: 每次刷新当前重做缓冲区需要更长的时间 比这多少秒,这有的次数 发生与RedoOverCommitCounter进行了比较。
ReservedSendBufferMemory: 此参数存在于NDB代码中,但未启用。
RestartOnErrorInsert: 由插入错误(当 已启用停止错误)。
SchedulerExecutionTimer: 之前在调度程序中执行的微秒数 发送。
SchedulerResponsiveness: 设置NDB调度程序响应优化0-10;更高的值 提供更好的响应时间,但吞吐量较低。
SchedulerSpinTimer: 之前在调度程序中执行的微秒数 睡眠。
ServerPort: 用于为传入连接设置传输器的端口 从 API 节点。
SharedGlobalMemory: 每个数据节点上分配给任何数据节点的总字节数 用。
StartFailRetryDelay: 在重试之前,启动失败后延迟(以秒为单位); 需要停止错误 = 0。
StartFailureTimeout: 终止前等待的毫秒。(0=永远等待)。
StartNoNodeGroupTimeout: 等待没有节点组的节点的时间,然后再尝试 开始(0=永远)。
StartPartialTimeout: 在尝试在没有全部的情况下开始之前等待的毫秒数 节点。(0=永远等待)。
StartPartitionedTimeout: 尝试开始分区之前等待的毫秒数。 (0=永远等待)。
StartupStatusReportFrequency: 启动期间状态报告的频率。
StopOnError: 设置为 0 时,数据节点会自动重启和恢复 以下节点故障。
StringMemory: 字符串内存的默认大小(0 到 100 = 最大值的百分比,101+ = 实际字节数)。
TcpBind_INADDR_ANY: 绑定IP_ADDR_ANY以便可以从 任何地方(对于自动生成的连接)。
TimeBetweenEpochs: 纪元之间的时间(用于复制的同步)。
TimeBetweenEpochsTimeout: 纪元之间的时间超时。“超出原因”节点 关闭。
TimeBetweenGlobalCheckpoints: 组将事务提交到磁盘之间的时间。
TimeBetweenGlobalCheckpointsTimeout: 将事务组提交到磁盘的最小超时。
TimeBetweenInactiveTransactionAbortCheck: 检查非活动事务之间的时间。
TimeBetweenLocalCheckpoints: 拍摄数据库快照之间的时间(以 以 2 为底的字节对数)。
TimeBetweenWatchDogCheck: 数据节点内执行检查之间的时间。
TimeBetweenWatchDogCheckInitial: 数据节点内执行检查之间的时间(提前启动) 分配内存的阶段)。
TotalSendBufferMemory: 用于所有传输器发送缓冲区的总内存。
TransactionBufferMemory: 键和属性数据的动态缓冲区空间(以字节为单位) 为每个数据节点分配。
TransactionDeadlockDetectionTimeout: 事务事务可以在数据节点内执行的时间。这 是事务协调器等待每个数据的时间 参与事务执行请求的节点。如果 数据节点花费的时间超过此量,事务 已中止。
TransactionInactiveTimeout: 应用程序在执行另一个应用程序之前等待的毫秒数 交易的一部分。这是时间事务协调器 等待应用程序执行或发送另一个部件 (查询、语句)的交易。如果申请也需要 很多时间,然后事务中止。超时 = 0 表示 该应用程序永远不会超时。
TwoPassInitialNodeRestartCopy: 在初始节点重新启动期间分 2 次复制数据,这 支持多线程构建有序索引 重新 启动。
UndoDataBuffer: 闲置;没有效果。
UndoIndexBuffer: 闲置;没有效果。
UseShm: 在此数据节点和 API 之间使用共享内存连接 节点也在此主机上运行。
## 以下参数特定于 ndbmtd:
MaxNoOfExecutionThreads: 仅对于 ndbmtd,请指定最大执行次数 线程。
NoOfFragmentLogParts: 属于此数据节点的重做日志文件组数。
ThreadConfig: 用于配置多线程数据节点 (ndbmtd)。 默认值为空字符串;有关语法和文档,请参阅文档 其他信息。
问题项
1、mysql更改数据目录后无法启动问题
查看MySQL的错误日志
解决办法
1、在MySQL的systemd中添加限制
vim /lib/systemd/system/mysql.service
[Service]
LimitNOFILE=65535
2、在/etc下修改系统的句柄数
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
sysctl -p
1、修改目录后添加授权
chown -R mysql.mysql data
修改了my.cnf中的datadir的值
chown和chmod了数次新数据目录或者其父路径的属主和权限
2、重启后问题依然存在
原因:1、centos中selinux开启后,修改MySQL的数据目录后重启会失败
2、apparmor,对mysql所能使用的目录权限做了限制
vim /etc/apparmor.d/usr.sbin.mysqld
添加新数据目录
systemctl daemon-reload
systemctl restart apparmor
2、初始化MySQL错误
原因:系统中没有安装libaio
解决办法:
apt install libaio-dev
3、启动MySQL错误
systemctl start mysql
Failed to start mysql.service: Unit mysql.service is masked.
原因:机器MySQL卸载不干净,导致启动服务屏蔽,不能启动
root@podB:/etc/init.d# systemctl unmask mysql.service
Removed symlink /etc/systemd/system/mysql.service.
##重启服务
4、mysql启动报错
#MySQL集群中先停止mysql数据节点后重启出现错误
The server quit without updating PID file!
原因有很多。
1、可能是/usr/local/mysql/data/mysql.pid文件没有写的权限
解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R 755 /usr/local/mysql/data” 然后重新启动mysqld!
此方式未解决
2、可能进程里已经存在mysql进程 解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!
此方式未解决
3、可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了
此方式不适用
4、mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data
5、skip-federated字段问题
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
此方案不适用
6、错误日志目录不存在
解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限
此方案不适用
5、sql节点建表时异常
mysql> use bg;
Database changed
mysql> CREATE TABLE bgt1 (id INT,`name` VARCHAR(20),PRIMARY KEY(`id`))ENGINE=NDBCLUSTER;
ERROR 1296 (HY000): Got error 781 'Invalid schema transaction key from NDB API' from NDBCLUSTER
原因:数据节点连接异常,管理节点出现以下提示
ndb_mgm> Node 2: Forced node shutdown completed. Caused by error 2815: 'File not found(Ndbd file system inconsistency error, please report a bug). Ndbd file system error, restart node initial'.
解决办法
重新连接数据节点
cd /usr/local/mysql/bin
./ndbd --initial
##注意事项,正式环境中非首次连接不用initial参数,否则集群数据易丢失。
mysql初始化后启动正常时目录权限
root@podB:/usr/local/mysql# ll
total 432
drwxr-xr-x 11 root mysql 4096 Feb 22 16:13 ./
drwxr-xr-x 13 root root 4096 Feb 16 17:56 ../
drwxr-xr-x 2 root mysql 4096 Feb 17 11:33 bin/
drwxr-xr-x 6 mysql mysql 4096 Feb 22 16:56 data/
drwxr-xr-x 2 root mysql 4096 Feb 17 11:33 docs/
drwxr-xr-x 4 root mysql 4096 Feb 17 11:33 include/
drwxr-xr-x 5 root mysql 4096 Feb 17 11:33 lib/
-rw-r--r-- 1 root mysql 385412 Feb 17 11:33 LICENSE
drwxr-xr-x 4 root mysql 4096 Feb 17 11:33 man/
drwxr-xr-x 10 root mysql 4096 Feb 17 11:33 mysql-test/
-rw-r--r-- 1 root mysql 587 Feb 17 11:33 README
-rw-r--r-- 1 root mysql 587 Feb 17 11:33 README-test
drwxr-xr-x 31 root mysql 4096 Feb 17 11:33 share/
drwxr-xr-x 2 root mysql 4096 Feb 17 11:54 support-files/
root@podB:/usr/local/mysql/data# ll
total 122956
drwxr-xr-x 6 mysql mysql 4096 Feb 22 16:56 ./
drwxr-xr-x 11 root mysql 4096 Feb 22 16:13 ../
-rw-r----- 1 mysql mysql 56 Feb 22 16:54 auto.cnf
-rw------- 1 mysql mysql 1680 Feb 22 16:54 ca-key.pem
-rw-r--r-- 1 mysql mysql 1140 Feb 22 16:54 ca.pem
-rw-r--r-- 1 mysql mysql 1140 Feb 22 16:54 client-cert.pem
-rw------- 1 mysql mysql 1680 Feb 22 16:54 client-key.pem
-rw-r----- 1 mysql mysql 440 Feb 22 16:54 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Feb 22 16:56 ibdata1
-rw-r----- 1 mysql mysql 50331648 Feb 22 16:56 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Feb 22 16:54 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Feb 22 16:56 ibtmp1
drwxr-x--- 2 mysql mysql 4096 Feb 22 16:54 mysql/
drwxr-x--- 2 mysql mysql 4096 Feb 22 16:54 ndbinfo/
drwxr-x--- 2 mysql mysql 4096 Feb 22 16:54 performance_schema/
-rw-r----- 1 mysql mysql 6 Feb 22 16:56 podB.pid
-rw------- 1 mysql mysql 1680 Feb 22 16:54 private_key.pem
-rw-r--r-- 1 mysql mysql 452 Feb 22 16:54 public_key.pem
-rw-r--r-- 1 mysql mysql 1140 Feb 22 16:54 server-cert.pem
-rw------- 1 mysql mysql 1676 Feb 22 16:54 server-key.pem
drwxr-x--- 2 mysql mysql 12288 Feb 22 16:54 sys/
apparmor的介绍
AppArmor(Application Armor)是Linux内核的一个安全模块,AppArmor允许系统管理员将每个程序与一个安全配置文件关联,从而限制程序的功能。简单的说,AppArmor是与SELinux类似的一个访问控制系统,通过它你可以指定程序可以读、写或运行哪些文件,是否可以打开网络端口等。作为对传统Unix的自主访问控制模块的补充,AppArmor提供了强制访问控制机制,它已经被整合到2.6版本的Linux内核中。
AppArmor是 Ubuntu 的默认选择,但在默认情况下,系统自带安装的profile配置文件很少,通过命令:sudo apt install apparmor-profiles,可以安装额外的AppArmor-profile文件。在Ubuntu下通过命令sudo apparmor_status可以查看当前AppArmor的状态。 Apparmor的profile配置文件均保存在目录/etc/apparmor.d,对应的日志文件记录在/var/log/messages。
apparmor的工作模式
enforcement
Enforcement – 在这种模式下,配置文件里列出的限制条件都会得到执行,并且对于违反这些限制条件的程序会进行日志记录。
Complain
在这种模式下,配置文件里的限制条件不会得到执行,Apparmor只是对程序的行为进行记录。例如程序可以写一个在配置文件里注明只读的文件,但Apparmor不会对程序的行为进行限制,只是进行记录。
apparmor的访问控制和资源限制
(1)文件系统的访问控制
Apparmor可以对某一个文件,或者某一个目录下的文件进行访问控制
可读、可写、可扩展、可链接等(还有可执行x在表中没有列出)……
(2)资源限制
Apparmor可以提供类似系统调用setrlimit一样的方式来限制程序可以使用的资源。要限制资源,可在配置文件中这样写:
set rlimit [resource] <= [value],
其resource代表某一种资源,value代表某一个值,
要对程序可以使用的虚拟内存做限制时,可以这样写:
set rlimit as<=1M, (可以使用的虚拟内存最大为1M)
注意:Apparmor可以对程序要使用多种资源进行限制(fsize
,data
,stack
,core
,rss
,as
,memlock
,msgqueue``等),但暂不支持对程序可以使用``CPU``时间进行限制。(现在``OJ``一般都对``ACMer``提交的程序的运行时间有严格的限制,所以要将``Apparmor``用于``OJ``后台安全模块,必须自己另外实现对``CPU``时间的限制。)
https://www.bbsmax.com/A/kPzOZpbZdx/
https://www.cnblogs.com/Lqdream/p/16918704.html
(3)访问网络
Apparmor``可以程序是否可以访问网络进行限制,在配置文件里的语法是:
network [ [domain] [type] [protocol] ]
要让程序可以进行所有的网络操作,只需在配置文件中写:
network,
要允许程序使用在IPv4下使用TCP协议,可以这样写:
network inet tcp,
配置文件的编写
编写完配置文件后,要把文件放到/etc/apparmor.d这个目录下,其实有更方便的方法,直接在命令行里面用:
sudo aa- genprof [filename] (aa- genprof 需要安装apparmor-utils )
就可以为指定的程序创建一个配置文件,并把它放到该目录。
建立的内容配置
# Last Modified: Mon Feb 10 17:08:27 2020
#include <tunables/global>
/usr/bin/nmcli {
#include <abstractions/base>
/lib/x86_64-linux-gnu/ld-*.so mr,
/usr/bin/nmcli mr,
}
##注意,该文件默认使用enforcement模式,要修改模式,只需将配置文件改为:
# Last Modified: Mon Feb 10 17:08:27 2020
#include <tunables/global>
/usr/bin/nmcli flags=(complain){
#include <abstractions/base>
/lib/x86_64-linux-gnu/ld-*.so mr,
/usr/bin/nmcli mr,
}
##重载生效
sudo systemctl reload apparmor.service
解决办法
root@podB:/etc/init.d# systemctl start mysql
Failed to start mysql.service: Unit mysql.service is masked.
root@podB:/etc/init.d# systemctl unmask mysql.service
Removed symlink /etc/systemd/system/mysql.service.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)