Linux平台-数据库技术

日常处理数据库相关工作

Mysql主从复制,ip地址变化后的处理

在 Ubuntu 14.04 + MySQL 5.5 的环境下,如果两台虚拟服务器的 IP 地址发生变化,主从复制可能会失效,因为 MySQL 复制配置通常依赖于 IP 地址或主机名。因此,需要手动调整配置并重新建立主从复制。以下是详细步骤:
1. 确认新的 IP 地址

在两台服务器上执行以下命令,获取新的 IP 地址:

ip a

假设:

    主服务器 (Master) 新 IP:192.168.1.100
    从服务器 (Slave) 新 IP:192.168.1.101

2. 修改 MySQL 主从配置
(1)修改 Master 配置

编辑 MySQL 配置文件:

sudo vi /etc/mysql/my.cnf

检查或添加以下内容:

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = your_database   # 需要复制的数据库
bind-address = 192.168.1.100  # 修改为新 IP

然后重启 MySQL:

sudo service mysql restart

在 MySQL 主服务器上,重新授权从服务器访问:

GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'192.168.1.101' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;

(2)修改 Slave 配置

编辑从服务器的 MySQL 配置:

sudo vi /etc/mysql/my.cnf

修改以下内容:

[mysqld]
server-id = 2
relay-log = mysql-relay-bin
replicate-do-db = your_database   # 需要复制的数据库
bind-address = 192.168.1.101  # 修改为新 IP

然后重启 MySQL:

sudo service mysql restart

3. 重新配置 Slave

登录从服务器的 MySQL:

mysql -u root -p

停止复制:

STOP SLAVE;

重设主服务器信息:

CHANGE MASTER TO
    MASTER_HOST='192.168.1.100',
    MASTER_USER='replica_user',
    MASTER_PASSWORD='your_password',
    MASTER_LOG_FILE='mysql-bin.000001',  -- 请使用 SHOW MASTER STATUS 查看的最新 binlog 文件
    MASTER_LOG_POS=107;                  -- 请使用 SHOW MASTER STATUS 查看的最新 Position

启动复制:

START SLAVE;

4. 检查主从同步状态

在从服务器上执行:

SHOW SLAVE STATUS\G

关键检查项:

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Seconds_Behind_Master: 0(或接近 0)

如果 Slave_IO_Running 或 Slave_SQL_Running 不是 Yes,可以查看 Last_Error 进行排查。
5. 设置主机名绑定(可选,防止 IP 变更问题)

如果 IP 可能再次变动,建议使用主机名代替 IP 地址:

    在 /etc/hosts 文件中添加:

    192.168.1.100    mysql-master
    192.168.1.101    mysql-slave

    在 MySQL 的 CHANGE MASTER TO 语句中使用 mysql-master 代替 IP。

总结

    确认新的 IP 地址,并修改 MySQL 配置文件。
    重新授权从服务器的访问权限。
    在 Slave 端重新配置 CHANGE MASTER TO。
    启动 Slave 并检查同步状态。
    (可选)使用主机名绑定,避免 IP 变更影响。

这样,你的 MySQL 5.5 主从复制应该可以恢复正常运行。

实际操作案例,仅配置从服务器:

当你的 MySQL 主服务器 IP 从 192.168.18.27 更改为 192.168.6.27 后,为了确保主从复制继续正常工作,你需要在从服务器上重新配置复制源的主机地址。下面是操作步骤:


修改主从复制配置的正确步骤

1. 停止从服务器复制线程

在从服务器上执行:

STOP SLAVE;

2. 修改主服务器地址

重新设置主服务器的 IP 地址(注意保留之前获取的 MASTER_LOG_FILEMASTER_LOG_POS 信息):

CHANGE MASTER TO 
MASTER_HOST='192.168.6.27',
MASTER_PORT=3306,
MASTER_USER='replicator',
MASTER_PASSWORD='Passw0rd',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=867,
GET_MASTER_PUBLIC_KEY=1;

✅ 说明:


3. (可选)保留原来的延迟设置(如果需要)

CHANGE MASTER TO MASTER_DELAY = 3600;

4. 重新启动复制

START SLAVE;

5. 验证从服务器状态

SHOW SLAVE STATUS\G;

重点查看以下字段:


🔁 如有主服务器绑定了 IP,记得确认监听地址

如果主服务器上 MySQL 绑定了旧 IP,确保它现在绑定的是 0.0.0.0192.168.6.27

编辑主服务器 /etc/mysql/my.cnf/etc/my.cnf 中的 bind-address

bind-address = 0.0.0.0

然后重启 MySQL 服务:

sudo systemctl restart mysql

如有其它限制(如防火墙、iptables、主从网段隔离等),请确保从服务器能正常连接到 192.168.6.27:3306

 

MySQL中对数据库表按月进行水平分区

要在 MySQL 5.5 中对数据库 shunsync 的表 sl_history_data 按月进行水平分区,基于类型为 DATE 的字段 time,你可以按照以下步骤来完成设置。
1. 进入数据库

首先,进入 shunsync 数据库:

sql

USE shunsync;

2. 创建分区表

假设表 sl_history_data 还未创建,我们可以创建表时通过 PARTITION BY RANGE 来按月份对 time 字段进行分区。具体 SQL 语句如下:

sql

CREATE TABLE sl_history_data (
    id INT NOT NULL,
    time DATE NOT NULL,
    data VARCHAR(255),
    PRIMARY KEY (id, time)
)
PARTITION BY RANGE (YEAR(time) * 100 + MONTH(time)) (
    PARTITION p202301 VALUES LESS THAN (202302),
    PARTITION p202302 VALUES LESS THAN (202303),
    PARTITION p202303 VALUES LESS THAN (202304),
    PARTITION p202304 VALUES LESS THAN (202305),
    PARTITION p202305 VALUES LESS THAN (202306),
    PARTITION p202306 VALUES LESS THAN (202307),
    PARTITION p202307 VALUES LESS THAN (202308),
    PARTITION p202308 VALUES LESS THAN (202309),
    PARTITION p202309 VALUES LESS THAN (202310),
    PARTITION p202310 VALUES LESS THAN (202311),
    PARTITION p202311 VALUES LESS THAN (202312),
    PARTITION p202312 VALUES LESS THAN (202401)
);

解释:

    PARTITION BY RANGE:使用 YEAR(time) * 100 + MONTH(time) 公式将日期转化为整数值,以便按范围进行分区。
    PARTITION p202301 等分区:每个分区存储一整个月的数据,比如 p202301 存储 2023 年 1 月的数据,VALUES LESS THAN (202302) 表示截止到 2023 年 2 月 1 日之前的数据都放入 p202301 分区中。
    PRIMARY KEY:主键包括 id 和 time,因为分区表要求主键或唯一键必须包含分区字段。

3. 如果表已存在,需要修改表结构

如果表 sl_history_data 已经存在,可以使用 ALTER TABLE 命令将其修改为分区表。首先,需要确保表没有现存的外键约束,然后对表进行分区:

sql

ALTER TABLE sl_history_data
PARTITION BY RANGE (YEAR(time) * 100 + MONTH(time)) (
    PARTITION p202301 VALUES LESS THAN (202302),
    PARTITION p202302 VALUES LESS THAN (202303),
    PARTITION p202303 VALUES LESS THAN (202304),
    PARTITION p202304 VALUES LESS THAN (202305),
    PARTITION p202305 VALUES LESS THAN (202306),
    PARTITION p202306 VALUES LESS THAN (202307),
    PARTITION p202307 VALUES LESS THAN (202308),
    PARTITION p202308 VALUES LESS THAN (202309),
    PARTITION p202309 VALUES LESS THAN (202310),
    PARTITION p202310 VALUES LESS THAN (202311),
    PARTITION p202311 VALUES LESS THAN (202312),
    PARTITION p202312 VALUES LESS THAN (202401)
);

4. 插入数据

当你插入数据时,MySQL 会根据 time 字段的值自动将数据放入对应的分区。例如:

sql

INSERT INTO sl_history_data (uid, time, attr, value)
VALUES ('653b0d8cb23ec96d1146dea8', '2024-10-15 1:01:59', 'noise', '88.888888'),
       ('653b0d8cb23ec96d1146dea8', '2024-10-15 3:08:59', 'pm2_5', '66.888888'),
       ('653b0d8cb23ec96d1146dea8', '2024-10-15 5:02:59', 'precipitation', '99.888888');

INSERT INTO sl_history_data (time, attr, value)
VALUES ('2024-10-15 1:01:59', 'noise', '88.888888'),
       ('2024-10-15 3:08:59', 'pm2_5', '66.888888'),
       ('2024-10-15 5:02:59', 'precipitation', '99.888888');

DELETE FROM sl_history_data
WHERE time BETWEEN '2024-10-14 00:00:00' AND '2024-10-15 23:59:59';

5. 查询分区数据

查询时,MySQL 只会扫描相关分区的数据,查询效率更高。例如:

sql

SELECT * FROM sl_history_data WHERE time BETWEEN '2023-02-01' AND '2023-02-28';

这个查询只会访问 p202302 分区,忽略其他分区,从而提升性能。
6. 动态管理分区

select TABLE_SCHEMA,TABLE_NAME,PARTITION_NAME,TABLE_ROWS from information_schema.partitions where table_name='sl_history_data';

在 MySQL 中,要查看现有分区的详细信息,包括 VALUES LESS THAN 后面的值,可以通过 SHOW CREATE TABLE 命令来查看表的分区定义。这个命令将展示表的创建语句,包括分区的详细信息。

SHOW CREATE TABLE sl_history_data;

每当进入新的月份,可以使用 ALTER TABLE 命令动态添加新的分区。例如,添加 2024 年 1 月的分区:

sql

SHOW CREATE TABLE sl_history_data;

ALTER TABLE sl_history_data
ADD PARTITION (
    PARTITION p108 VALUES LESS THAN ('2026-01-01') ENGINE = InnoDB
);

同样,如果需要删除旧分区(比如删除 2023 年 1 月的数据),可以执行:


ALTER TABLE sl_history_data
DROP PARTITION p202301;

总结

    MySQL 5.5 支持基于 DATE 字段的范围分区,通过 YEAR() 和 MONTH() 函数可以实现按月分区的功能。
    动态添加或删除分区可以方便地管理不断变化的数据量。

查看Mysql数据库各张表的信息

SELECT table_name, data_length + index_length AS len, table_rows,

    CONCAT(ROUND((data_length + index_length)/1024/1024,2),'MB') AS datas

FROM information_schema.tables

WHERE table_schema = '数据库名'

ORDER BY len DESC;

微信截图_20250514134215.png

查看Mysql数据库表的分区情况

select TABLE_SCHEMA,TABLE_NAME,PARTITION_NAME,TABLE_ROWS from information_schema.partitions where table_schema = 'shunsync'  and table_name='sl_history_data';

image.png

Mysql主从复制,延迟从库


1、主从节点开启log_bin,配置文件中移除 skip-log-bin 配置项


2、增加主从复制配置 [mysqld]
   a、主节点
vi /etc/my.cnf

server-id = 1
log-bin = /home/shuncom/mysql/data/mysql-bin
binlog_cache_size = 4M
binlog_format = mixed
max_binlog_cache_size = 8M
max_binlog_size = 512M
expire_logs_days = 14
gtid_mode = ON
enforce_gtid_consistency = ON

重启mysql服务
systemctl restart mysqld.service

    b、从节点
vi /etc/my.cnf

server-id = 2
slave-skip-errors=1007,1022,1050,1062,1169
relay-log=/home/shuncom/mysql/data/relay-log
max_relay_log_size=512M
relay-log-purge=ON
read-only
gtid_mode = ON
enforce_gtid_consistency = ON

重启mysql服务
systemctl restart mysqld.service

3、创建主从复制账户
    a、以root登录主节点
mysql -u root -p'Sz_clighting'
    b、创建复制用户(用户名、密码为示例),并授予权限
CREATE USER 'replicator'@'%' IDENTIFIED BY 'Passw0rd';  
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';  
FLUSH PRIVILEGES;
SHOW MASTER STATUS\G; -- 获取 MASTER_LOG_FILE、MASTER_LOG_POS


4、从节点开启复制
    a、以root用户登录从节点
mysql -u root -p'Sz_clighting'
    b、开启复制
CHANGE MASTER TO 
MASTER_HOST='172.17.20.17', 
MASTER_PORT=3306, 
MASTER_USER='replicator', 
MASTER_PASSWORD='Passw0rd', 
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=868,
get_master_public_key=1;

CHANGE MASTER TO MASTER_DELAY = 3600;
START SLAVE;
SHOW SLAVE STATUS\G;


      

在 Ubuntu 20.04 上将 MySQL 替换为 MariaDB

在 Ubuntu 20.04 上将 MySQL 替换为 MariaDB 的过程相对简单,但需要谨慎操作以确保数据不丢失。以下是详细的步骤:
1. 备份 MySQL 数据库
在任何升级或替换操作之前,务必备份数据。使用以下命令备份所有数据库:

mysqldump -u root -p --all-databases > /path/to/backup/all_databases.sql

2. 卸载 MySQL
首先,停止 MySQL 服务:

sudo systemctl stop mysql

卸载 MySQL:

sudo apt-get remove --purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*

删除 MySQL 配置和数据目录(注意:此操作会删除数据库文件,请确保你已经备份):

sudo rm -rf /etc/mysql /var/lib/mysql

删除 MySQL 相关的库和依赖:

sudo apt-get autoremovesudo apt-get autoclean

3. 安装 MariaDB
现在你可以安装 MariaDB。MariaDB 作为 MySQL 的兼容替代品,它的安装和配置与 MySQL 非常相似。
首先,更新包列表:

sudo apt-get update

安装 MariaDB:

sudo apt-get install mariadb-server mariadb-client

安装后,MariaDB 将自动启动,你可以通过以下命令检查其状态:

sudo systemctl status mariadb

4. 确保 MariaDB 自动启动
如果 MariaDB 没有自动启动,手动启用它:

sudo systemctl enable mariadb

5. 恢复数据库(如果有备份)
如果你之前备份了 MySQL 数据库,可以通过以下命令将其恢复到 MariaDB:

mysql -u root -p < /path/to/backup/all_databases.sql

6. 检查 MariaDB 配置
MariaDB 的配置文件位于 /etc/mysql/mariadb.conf.d/ 目录下。通常可以使用默认配置,但如果你需要自定义配置,修改相关的配置文件即可。
7. 确认 MariaDB 是否正常工作
运行以下命令连接 MariaDB:

sudo mysql -u root -p

然后,你可以通过以下 SQL 命令检查数据库是否恢复成功:

SHOW DATABASES;

8. 调整 MySQL/MariaDB 数据目录(可选)
如果你在安装 MariaDB 时指定了与 MySQL 不同的数据目录,确保 MariaDB 的数据文件路径与之前的 MySQL 数据路径一致。否则,你需要在 MariaDB 配置文件(如 /etc/mysql/mariadb.conf.d/50-server.cnf)中进行调整。
9. 调整客户端工具配置(如果需要)
如果你在使用 MySQL 客户端工具(如 mysqladmin、mysqldump 等),它们在 MariaDB 中应该也能正常工作,但有些配置可能需要调整,特别是在脚本中使用的参数。
10. 清理无用的包
最后,清理系统中不再需要的包和依赖:

sudo apt-get autoremovesudo apt-get autoclean

总结:
通过上述步骤,你可以轻松地将 Ubuntu 20.04 上的 MySQL 换成 MariaDB。MariaDB 完全兼容 MySQL,因此在大多数情况下,迁移后你的应用程序无需任何修改。如果在迁移过程中遇到问题,检查 MariaDB 的日志文件 /var/log/mysql/error.log 或 /var/log/mariadb/mariadb.log,这些文件将帮助你诊断潜在的错误。

oceanbase单机离线部署

基于all-in-one安装包

部署前先对系统参数进行修改,参照“附”部分

 

可建一个专门的用户进行数据库部署,与运维用的shuncom账号区分,创建用户与组时,指定UID(适配NFS部署逻辑,即用相同的用户部署NFS

 

一、解压并安装

tar -xzvf oceanbase-all-in-one-*.tar.gz

cd oceanbase-all-in-one/bin/

./install.sh

source ~/.oceanbase-all-in-one/bin/env.sh

 

cd ~

sudo cp oceanbase-all-in-one/obclient/u01/obclient/bin/mysqldump /usr/bin

 

二、配置OBD

1、禁用远程仓库

 obd mirror disable remote

 

2、将安装包添加至本地镜像

obd mirror clone *.rpm

 

3、查看本地镜像中安装包列表

obd mirror list local

 

4、配置文件替换

sudo cp mini-single-example.yaml /home/shuncom/.oceanbase-all-in-one/obd/usr/obd/example

 

三、部署 OceanBase 数据

 

1、deploy oceanbase

obd cluster deploy obstandalone -c mini-single-example.yaml

 

2、启动集群(只有一个节点)

 obd cluster start obstandalone


启动并初始化完成示意结果如下:

image.png

 

 

数据库客户端(obclient)访问示例(访问本机可不带-h参数):

 

obclient -h192.168.30.97 -P3306 -uroot -p

 

3、修改root密码

obd cluster edit-config obstandalone

 

修改 global 下的root_password: Sz_clighting

 

obd cluster reload obstandalone

 

4、租户及资源分配(ab两类方式选一)

a. 修改sys租户配置规格(CPU、内存规格按配置修改)

 

进入 控制台 obclient -P3306 -uroot -p

 

ALTER RESOURCE UNIT sys_unit_config MAX_CPU 4, MIN_CPU 4, MEMORY_SIZE '4G', LOG_DISK_SIZE '20G';

 

b. 创建用户租户shuncom

 

该命令默认根据集群剩余全部可用资源创建租户

obd cluster tenant create obstandalone -n shuncom

 

查看租户列表信息

obd cluster tenant show obstandalone

 

新建租户的root用户默认是无密码,需要修改密码

obclient -P3306 -uroot@shuncom

ALTER USER 'root'@'%' IDENTIFIED BY 'Sz_clighting';

 

5、重启服务

obd cluster restart obstandalone

 

附:

1、修改系统参数

echo -e "* soft nproc 655350\n* hard nproc 655350" >> /etc/security/limits.d/nproc.conf

echo -e "* soft nofile 655350\n* hard nofile 655350" >> /etc/security/limits.d/nofile.conf

echo -e "* soft stack unlimited\n* hard stack unlimited" >> /etc/security/limits.d/stack.conf

 

2、修改虚拟内存参数、IO参数

echo "vm.max_map_count=655360" >> /etc/sysctl.conf

echo "vm.overcommit_memory=0" >> /etc/sysctl.conf

echo "fs.aio-max-nr=1048576" >> /etc/sysctl.conf                                                                                                                                          

sysctl -p

OceanBase 数据备份与恢复

数据备份
1、备份配置
# 进入 shuncom 租户 root 用户控制台
obclient -P3306 -uroot@shuncom -p
# 配置日志归档目的端
ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOCATION=file:///home/shuncom/obbackup/archive';
# 开启归档模式
ALTER SYSTEM ARCHIVELOG;
# 配置数据备份目的端
ALTER SYSTEM SET DATA_BACKUP_DEST='file:///home/shuncom/obbackup/data';
# 发起全量数据备份(需要等待日志归档任务的 STATUS 为 DOING)
ALTER SYSTEM BACKUP DATABASE;
# 发起增量备份(当前不需要执行)
ALTER SYSTEM BACKUP INCREMENTAL DATABASE;
2、设置自动清理策略
ALTER SYSTEM ADD DELETE BACKUP POLICY 'default' RECOVERY_WINDOW '3d';
3、设置定时全量备份任务,执行以下脚本
# 创建备份脚本
mkdir /home/shuncom/bin
echo "/usr/bin/obclient -P3306 -uroot@shuncom -p'Sz_clighting' -e 'ALTER SYSTEM BACKUP DATABASE'" > /home/shuncom/bin/obbackup
sudo chown root.root /home/shuncom/bin/obbackup
sudo chmod 700 /home/shuncom/bin/obbackup
# 添加定时任务
sudo crontab -e
30 12 */2 * * /home/shuncom/bin/obbackup
附:
1、日志归档管理
# 进入 shuncom 租户 root 用户控制台
obclient -P3306 -uroot@shuncom -p
# 查看租户归档进度
SELECT * FROM oceanbase.DBA_OB_ARCHIVELOG\G;
# 查看租户归档历史
SELECT * FROM oceanbase.DBA_OB_ARCHIVELOG_SUMMARY\G;
# 暂停归档
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE='DEFER';
# 启动归档
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE='ENABLE';
# 关闭归档模式
ALTER SYSTEM NOARCHIVELOG;
# 清空归档路径(要求租户当前的归档状态为 STOP)
ALTER SYSTEM SET LOG_ARCHIVE_DEST='';# 查看 Piece 信息
SELECT * FROM oceanbase.DBA_OB_ARCHIVELOG_PIECE_FILES\G;
2、数据备份管理
# 查看数据备份进度
SELECT * FROM oceanbase.DBA_OB_BACKUP_JOBS\G;
# 查看数据备份结果
SELECT * FROM oceanbase.DBA_OB_BACKUP_JOB_HISTORY\G;
# 停止备份
ALTER SYSTEM CANCEL BACKUP;
# 清空备份路径
ALTER SYSTEM SET DATA_BACKUP_DEST='';
# 查看备份相关参数
SELECT * FROM oceanbase.CDB_OB_BACKUP_PARAMETER\G;
3、清理策略管理
# 查看清理策略
SELECT * FROM oceanbase.DBA_OB_BACKUP_DELETE_POLICY;
# 查看备份清理进度
SELECT * FROM oceanbase.DBA_OB_BACKUP_DELETE_JOBS\G;
SELECT * FROM oceanbase.DBA_OB_BACKUP_DELETE_TASKS\G;
# 查看备份清理结果
SELECT * FROM oceanbase.DBA_OB_BACKUP_DELETE_JOB_HISTORY\G;
SELECT * FROM oceanbase.DBA_OB_BACKUP_DELETE_TASK_HISTORY\G;
# 停止清理备份
ALTER SYSTEM DROP DELETE BACKUP POLICY 'default';
4、数据恢复
按表恢复
# 恢复前准备
a、 如果是将库恢复到前一个时间点(即 rulr_things 已存在),需要先将当前备份停止,并将库备份并重建
1) 停止备份和清理策略
sudo crontab -e
obclient -P3306 -uroot -p
ALTER SYSTEM CANCEL BACKUP TENANT = shuncom;
ALTER SYSTEM NOARCHIVELOG TENANT = shuncom;
ALTER SYSTEM DROP DELETE BACKUP POLICY 'default' TENANT shuncom;
ALTER SYSTEM SET LOG_ARCHIVE_DEST='';
ALTER SYSTEM SET DATA_BACKUP_DEST='';
注:
恢复完成后,需要重新开启备份和清理策略(清空或重命令当前的备份目录)
2) 备份库
shell 控制台执行
mkdir /home/shuncom/sql_dump
mysqldump -h ip_address -P 3306 --skip-add-drop-table --init-sql="SET SESSION ob_query_timeout = 1000000000;" -u root@shuncom -p \
rulr_things > /home/shuncom/sql_dump/rulr_things_dump_01.sql
3) 重建数据库(先删除原库,再建新库)
obclient -P3306 -uroot@shuncom -pDROP DATABASE rulr_things;
CREATE DATABASE rulr_things DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
grant all on rulr_things.* to "shuncom"@"%";
# 进入 sys 租户管理
obclient -P3306 -uroot -p
# 创建恢复辅助租户资源
创建资源单元
CREATE RESOURCE UNIT unit_assistant MAX_CPU 2, MEMORY_SIZE = '4G', LOG_DISK_SIZE= '4G', MAX_IOPS 10240, MIN_IOPS=10240;
注:(以 4 核 20G 为例)
当前资源不够时,需要先缩小 shuncom 租户的资源规格(恢复完成后再还原资源规格)(需要查看并记录当前的资源规格)
ALTER RESOURCE UNIT shuncom_unit MAX_CPU 1, MIN_CPU 1, MEMORY_SIZE '4G',LOG_DISK_SIZE '10G';
还原:
ALTER RESOURCE UNIT shuncom_unit MAX_CPU 3, MIN_CPU 3, MEMORY_SIZE '10G',LOG_DISK_SIZE '16G';
创建资源池
CREATE RESOURCE POOL pool_assistant unit = 'unit_assistant', unit_num = 1, zone_list = ('zone1');
# 恢复 rulr_things 所有表
ALTER SYSTEM
RECOVER TABLE rulr_things.*
TO TENANT shuncom
FROM 'file:///home/shuncom/obbackup/data,file:///home/shuncom/obbackup/archive'
UNTIL TIME='2024-11-30 00:00:00'
WITH 'pool_list=pool_assistant';
# 查看恢复进度
SELECT * FROM oceanbase.CDB_OB_RECOVER_TABLE_JOBS\G;
# 查看恢复结果
SELECT * FROM oceanbase.CDB_OB_RECOVER_TABLE_JOB_HISTORY\G;
# 清理资源
DROP RESOURCE POOL pool_assistant;
DROP RESOURCE UNIT unit_assistant;
# 取消按表恢复(如果有需求)
ALTER SYSTEM CANCEL RECOVER TABLE shuncom;
# 恢复结果分析
a、部分表名的大小写会变化,如 quartz 相关表会从大写变小写(数据库默认是大小写不敏感,影响可以忽略)
b、部分表的外键丢失,影响未知,如:
QRTZ_BLOB_TRIGGERS
QRTZ_CRON_TRIGGERS
QRTZ_SIMPLE_TRIGGERS
QRTZ_SIMPROP_TRIGGERS
QRTZ_SUNRS_TRIGGERS
5、NFS 安装与配置
系统需要支持 RPM 包管理(如 CentOS、Kylinv10)
# 上传 nfs 相关包
nfs-utils-2.5.1-8.p01.ky10.x86_64.rpm
rpcbind-1.2.5-5.p01.ky10.x86_64.rpm
# 安装 nfs
rpm -ivh *.rpm
# 查看安装结果
rpm -qa | grep nfs-utils
# 启动 nfssystemctl start nfs-server.service
systemctl enable nfs-server.service
a、server 端配置
# 创建共享目录
mkdir /home/shuncom/obbackup
# 共享配置
sudo vim /etc/exports
增加以下内容
/home/shuncom/obbackup/ 192.168.30.0/24(rw,sync,no_root_squash)
# nfs 参数配置
sudo vim /etc/sysconfig/nfs
增加以下内容
RPCNFSDCOUNT=8
RPCNFSDARGS="-N 2 -N 3 -U"
NFSD_V4_GRACE=90
NFSD_V4_LEASE=90
# 重启 nfs
sudo systemctl restart nfs-server.service
# 设置 Slot Table
sudo vim /etc/sysctl.conf
增加以下内容
sunrpc.tcp_max_slot_table_entries=128
执行以下命令
sudo sysctl -w sunrpc.tcp_max_slot_table_entries=128
查看设置是否生效
cat /proc/sys/sunrpc/tcp_max_slot_table_entries
b、client 端(oceanbase)配置
# 设置 Slot Table
sudo vim /etc/sysctl.conf
增加以下内容
sunrpc.tcp_max_slot_table_entries=128
执行以下命令
sudo sysctl -w sunrpc.tcp_max_slot_table_entries=128
查看设置是否生效
cat /proc/sys/sunrpc/tcp_max_slot_table_entries
# 挂载远程目录
sudo mount -tnfs4 -o rw,nfsvers=4.1,sync,lookupcache=positive,hard,timeo=600,wsize=1048576,rsize=1048576,namlen=255 \
192.168.30.96:/home/shuncom/obbackup /home/shuncom/obbackup