电科金仓数据库V9 MySQL兼容版本搭建一主一从体验
总体思路:
主库和备库搭建好数据库软件,主库创建数据库。备库可以不创建数据库。后续通过初始化的方式从主库同步数据,并启动备库即可。
软件安装和主库的初始化在这里忽略,请参考上一篇文章:
以下开始配置主从:
1.创建归档目录
mkdir /data/kingbase/arch
2.配置主库参数
wal_log_hints=on
full_page_writes=on
max_wal_size=1GB
min_wal_size=100MB
wal_level=replica
archive_command='test ! -f /data/kingbaseES/V9/kes_instance/sys_wal/archive_status/%f && cp %p /data/kingbase/arch/%f'
archive_timeout=0
synchronous_commit=local
synchronous_standby_names='node2'
archive_mode=on
checkpoint_completion_target=0.5
checkpoint_timeout=10min
shared_buffers=1GB
max_connections=1000
archive_cleanup_command ='sys_archivecleanup -d /data/kingbase/arch %r'
log_filename = 'kingbase-%Y-%m-%d.log'
3.重启主库
sys_ctl -D /data/kingbase/kingbaseES/V9/kes_instance status
sys_ctl -D /data/kingbase/kingbaseES/V9/kes_instance restart
4.登录主库创建复制槽
select pg_create_physical_replication_slot('slot_itsmbak');
select * from pg_replication_slots;
kingbase=# select * from pg_replication_slots;
-[ RECORD 1 ]-------+-------------
slot_name | slot_itsmbak
plugin |
slot_type | physical
datoid |
database |
temporary | f
active | f
active_pid |
xmin |
catalog_xmin |
restart_lsn |
confirmed_flush_lsn |
5.备库clone主库数据
如果备库已经初始化,则先把备库停下来,然后把数据文件目录改名字
sys_ctl -D /data/kingbase/kingbaseES/V9/kes_instance stop
mv /data/kingbase/kingbaseES/V9/kes_instance /data/kingbase/kingbaseES/V9/kes_instance_orgbak
备库执行如下命令clone主库数据
sys_basebackup -h 10.10.236.162 -Usystem -D /data/kingbase/kingbaseES/V9/kes_instance -P -v -X stream -F p -S slot_itsmbak -R
[kingbase@itsmbak V9]$ sys_basebackup -h 10.10.236.162 -Usystem -D /data/kingbase/kingbaseES/V9/kes_instance -P -v -X stream -F p -S slot_itsmbak -R
sys_basebackup: initiating base backup, waiting for checkpoint to complete
sys_basebackup: checkpoint completed
sys_basebackup: write-ahead log start point: 0/9000028 on timeline 1
sys_basebackup: starting background WAL receiver
86545/86545 kB (100%), 1/1 表空间
sys_basebackup: write-ahead log end point: 0/90000F8
sys_basebackup: waiting for background process to finish streaming ...
sys_basebackup: syncing data to disk ...
sys_basebackup: base backup completed
[kingbase@itsmbak V9]$
[kingbase@itsmbak kes_instance]$ ll
总用量 64
-rw------- 1 kingbase kingbase 225 5月 28 00:12 backup_label
drwx------ 7 kingbase kingbase 67 5月 28 00:12 base
-rw------- 1 kingbase kingbase 88 5月 28 00:12 current_logfiles
drwx------ 2 kingbase kingbase 4096 5月 28 00:12 global
-rw------- 1 kingbase kingbase 370 5月 28 00:12 initdb.conf
-rw------- 1 kingbase kingbase 395 5月 28 00:12 kingbase.auto.conf
-rw------- 1 kingbase kingbase 28044 5月 28 00:12 kingbase.conf
-rw------- 1 kingbase kingbase 0 5月 28 00:12 standby.signal <<<<
查看主库信息
[kingbase@itsmbak kes_instance]$ cat kingbase.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=system passfile=''/home/kingbase/.kbpass'' host=10.10.236.162 port=54321 client_encoding=UTF8 application_name=internal_backup sslmode=prefer sslcompression=0 gssencmode=disable target_session_attrs=any loadbalance=off fastswitch=off enable_ce=0'
primary_slot_name = 'slot_itsmbak'
6.启动备库
sys_ctl -D /data/kingbase/kingbaseES/V9/kes_instance status
sys_ctl -D /data/kingbase/kingbaseES/V9/kes_instance start
[kingbase@itsmbak kes_instance]$ sys_ctl -D /data/kingbase/kingbaseES/V9/kes_instance start
等待服务器进程启动 ....2026-05-28 00:20:15.504 CST [2194458] LOG: sepapower扩展初始化完成
2026-05-28 00:20:15.510 CST [2194458] LOG: 正在启动 KingbaseES V009R003C015
2026-05-28 00:20:15.510 CST [2194458] LOG: 正在监听IPv4地址"0.0.0.0",端口 54321
2026-05-28 00:20:15.510 CST [2194458] LOG: 正在监听IPv6地址"::",端口 54321
2026-05-28 00:20:15.514 CST [2194458] LOG: 在Unix套接字 "/tmp/.s.KINGBASE.54321"上侦听
2026-05-28 00:20:15.593 CST [2194458] LOG: 日志输出重定向到日志收集进程
2026-05-28 00:20:15.593 CST [2194458] HINT: 后续的日志输出将出现在目录 "/data/kingbase/kingbaseES/V9/kes_instance/sys_log"中.
完成
服务器进程已经启动
[kingbase@itsmbak kes_instance]$
7.查看主备库进程信息
主库
[kingbase@itsm ~]$ ps -ef |grep kingbase
kingbase 2742334 1 0 5月27 ? 00:00:00 /usr/lib/systemd/systemd --user
kingbase 2742338 2742334 0 5月27 ? 00:00:00 (sd-pam)
root 2744911 2744870 0 5月27 ? 00:00:00 sshd: kingbase [priv]
kingbase 2744921 2744911 0 5月27 ? 00:00:01 sshd: kingbase@pts/1
kingbase 2744930 2744921 0 5月27 pts/1 00:00:00 -bash
kingbase 2788473 1 0 00:02 ? 00:00:00 /data/kingbase/kingbaseES/V9/KESRealPro/V009R003C015/Server/bin/kingbase -D /data/kingbase/kingbaseES/V9/kes_instance
kingbase 2788475 2788473 0 00:02 ? 00:00:00 kingbase: kes_instance: logger
kingbase 2788477 2788473 0 00:02 ? 00:00:00 kingbase: kes_instance: checkpointer
kingbase 2788478 2788473 0 00:02 ? 00:00:00 kingbase: kes_instance: background writer
kingbase 2788479 2788473 0 00:02 ? 00:00:00 kingbase: kes_instance: walwriter
kingbase 2788480 2788473 0 00:02 ? 00:00:00 kingbase: kes_instance: autovacuum launcher
kingbase 2788481 2788473 0 00:02 ? 00:00:00 kingbase: kes_instance: archiver last was 000000010000000000000009.00000028.backup
kingbase 2788482 2788473 0 00:02 ? 00:00:00 kingbase: kes_instance: stats collector
kingbase 2788483 2788473 0 00:02 ? 00:00:00 kingbase: kes_instance: kwr collector
kingbase 2788484 2788473 0 00:02 ? 00:00:00 kingbase: kes_instance: ksh writer
kingbase 2788485 2788473 0 00:02 ? 00:00:00 kingbase: kes_instance: ksh collector
kingbase 2788486 2788473 0 00:02 ? 00:00:00 kingbase: kes_instance: logical replication launcher
root 2789845 2785873 0 00:11 pts/0 00:00:00 su - kingbase
kingbase 2789850 2789845 0 00:11 pts/0 00:00:00 -bash
kingbase 2791049 2788473 0 00:19 ? 00:00:00 kingbase: kes_instance: walsender system 10.10.1.1(56398) streaming 0/A000130
kingbase 2791118 2789850 0 00:19 pts/0 00:00:00 ps -ef
kingbase 2791119 2789850 0 00:19 pts/0 00:00:00 grep --color=auto kingbase
[kingbase@itsm ~]$
kingbase=# select * from pg_replication_slots;
-[ RECORD 1 ]-------+-------------
slot_name | slot_itsmbak
plugin |
slot_type | physical
datoid |
database |
temporary | f
active | t
active_pid | 2791049
xmin |
catalog_xmin |
restart_lsn | 0/A000130
confirmed_flush_lsn |
kingbase=#
kingbase=#
kingbase=# select * from pg_stat_replication;
-[ RECORD 1 ]----+---------------------------
pid | 2791049
usesysid | 10
usename | system
application_name | internal_backup
client_addr | 10.10.1.1
client_hostname |
client_port | 56398
backend_start | 2026-05-28 00:19:28.542349
backend_xmin |
state | streaming
sent_lsn | 0/A000130
write_lsn | 0/A000130
flush_lsn | 0/A000130
replay_lsn | 0/A000130
write_lag |
flush_lag |
replay_lag |
sync_priority | 0
sync_state | async
reply_time | 2026-05-28 00:23:42.355726
kingbase=#
kingbase=# select pg_is_in_recovery();
-[ RECORD 1 ]-----+--
pg_is_in_recovery | f
备库
[kingbase@itsmbak kes_instance]$ ps -ef |grep kingbase
kingbase 2154895 1 0 5月27 ? 00:00:00 /usr/lib/systemd/systemd --user
kingbase 2154899 2154895 0 5月27 ? 00:00:00 (sd-pam)
root 2155150 2154631 0 5月27 ? 00:00:00 sshd: kingbase [priv]
kingbase 2155160 2155150 0 5月27 ? 00:00:00 sshd: kingbase@pts/1
kingbase 2155169 2155160 0 5月27 pts/1 00:00:00 -bash
root 2191481 2190142 0 5月27 pts/0 00:00:00 su - kingbase
kingbase 2191486 2191481 0 5月27 pts/0 00:00:00 -bash
kingbase 2194458 1 0 00:20 ? 00:00:00 /data/kingbase/kingbaseES/V9/KESRealPro/V009R003C015/Server/bin/kingbase -D /data/kingbase/kingbaseES/V9/kes_instance
kingbase 2194460 2194458 0 00:20 ? 00:00:00 kingbase: kes_instance: logger
kingbase 2194461 2194458 0 00:20 ? 00:00:00 kingbase: kes_instance: startup recovering 00000001000000000000000A
kingbase 2194462 2194458 0 00:20 ? 00:00:00 kingbase: kes_instance: checkpointer
kingbase 2194463 2194458 0 00:20 ? 00:00:00 kingbase: kes_instance: background writer
kingbase 2194464 2194458 0 00:20 ? 00:00:00 kingbase: kes_instance: stats collector
kingbase 2194465 2194458 0 00:20 ? 00:00:00 kingbase: kes_instance: walreceiver streaming 0/A000130
kingbase 2194588 2191486 0 00:21 pts/0 00:00:00 ps -ef
kingbase 2194589 2191486 0 00:21 pts/0 00:00:00 grep --color=auto kingbase
[kingbase@itsmbak kes_instance]$
kingbase=# select * from pg_stat_replication;
(0 行记录)
kingbase=# select * from pg_replication_slots;
(0 行记录)
kingbase=# select pg_is_in_recovery();
-[ RECORD 1 ]-----+--
pg_is_in_recovery | t
8.验证数据同步
主库创建测试库表
kingbase=# create database zhou;
CREATE DATABASE
kingbase=# \c zhou
您现在以用户名"system"连接到数据库"zhou"。
zhou=#
zhou=# create table tabzhou(tid int primary key);
CREATE TABLE
zhou=# insert into tabzhou (1);
ERROR: 语法错误 在 "1" 或附近的
第1行insert into tabzhou (1);
^
zhou=# insert into tabzhou values(1);
INSERT 0 1
zhou=# commit;
警告: 没有事务在运行中
COMMIT
zhou=# select * from tabzhou;
tid
-----
1
(1 行记录)
zhou=# insert into tabzhou values(100);
INSERT 0 1
zhou=# select * from tabzhou;
tid
-----
1
100
(2 行记录)
从库查验库表
kingbase=# \l
数据库列表
名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限
-----------+--------+----------+------------+------------+-------------------
kingbase | system | UTF8 | zh_CN.utf8 | zh_CN.utf8 |
security | system | UTF8 | zh_CN.utf8 | zh_CN.utf8 |
template0 | system | UTF8 | zh_CN.utf8 | zh_CN.utf8 | =c/system +
| | | | | system=CTc/system
template1 | system | UTF8 | zh_CN.utf8 | zh_CN.utf8 | =c/system +
| | | | | system=CTc/system
test | system | UTF8 | zh_CN.utf8 | zh_CN.utf8 |
zhou | system | UTF8 | zh_CN.utf8 | zh_CN.utf8 |
(6 行记录)
kingbase=# \c zhou
您现在以用户名"system"连接到数据库"zhou"。
zhou=#
zhou=# \d
关联列表
架构模式 | 名称 | 类型 | 拥有者
----------+-------------------------+--------+--------
public | sys_stat_statements | 视图 | system
public | sys_stat_statements_all | 视图 | system
public | tabzhou | 数据表 | system
(3 行记录)
zhou=# select * from tabzhou;
tid
-----
1
100
(2 行记录)
zhou=#
zhou=#