在KylinV10系统上安装GreatSQL数据库前,需要先做好系统环境的准备工作。作为国产操作系统的代表,麒麟系统在安全策略上与常见的Linux发行版存在一些差异,这也是我们需要特别注意的地方。
麒麟系统默认的umask值为0077,这意味着新建文件的权限会被设置为600(rw-------),目录权限为700(rwx------)。这种严格的权限控制虽然增强了安全性,但会导致GreatSQL在运行过程中出现权限问题。我们需要将其调整为0022:
bash复制# 查看当前umask值
$ umask
0077
# 临时修改umask
$ umask 0022
# 永久生效配置(写入/etc/bashrc)
echo "umask 0022" >> /etc/bashrc
注意:修改umask后,需要重新登录终端或执行
source /etc/bashrc使配置生效。这个步骤至关重要,否则后续GreatSQL服务可能因无法访问数据文件而启动失败。
GreatSQL作为MySQL的增强分支,需要依赖一些基础系统库。在麒麟系统上,建议使用以下命令安装必要依赖:
bash复制yum install -y pkg-config perl libaio-devel numactl-devel \
numactl-libs net-tools openssl openssl-devel jemalloc \
jemalloc-devel perl-Data-Dumper perl-Digest-MD5 \
python2 perl-JSON perl-Test-Simple
常见问题处理:
yum clean all && yum makecache更新缓存考虑到数据库服务对系统资源的高需求,建议提前调整以下内核参数:
bash复制# 增加文件描述符限制
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
# 调整虚拟内存参数
echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "vm.dirty_ratio = 60" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio = 10" >> /etc/sysctl.conf
sysctl -p
这些调整可以减少系统在内存压力下的交换行为,提升数据库性能。特别是在国产化硬件环境下,合理的内存管理尤为重要。
在部署前需要确认系统架构和glibc版本:
bash复制# 查看系统信息
cat /etc/system-release
uname -a
ldd --version
GreatSQL官方提供了针对不同glibc版本的预编译包。对于KylinV10,通常选择glibc2.28版本的x86_64架构包。下载后建议进行完整性校验:
bash复制# 校验SHA256
sha256sum GreatSQL-8.4.4-4-Linux-glibc2.28-x86_64.tar.xz
按照Linux系统的惯例,我们将GreatSQL安装在/usr/local目录下:
bash复制cd /usr/local
tar xf GreatSQL-8.4.4-4-Linux-glibc2.28-x86_64.tar.xz
为了便于管理,建议创建符号链接:
bash复制ln -s GreatSQL-8.4.4-4-Linux-glibc2.28-x86_64 GreatSQL
注意:如果安装路径不是/usr/local,后续需要相应调整my.cnf配置和systemd服务文件中的所有路径引用。
GreatSQL自带了一些优化过的动态库,需要将这些路径加入系统库搜索路径:
bash复制cat >> /etc/ld.so.conf <<EOF
/usr/local/GreatSQL/lib/
/usr/local/GreatSQL/lib/private
/usr/local/GreatSQL/lib/mysqlrouter/
/usr/local/GreatSQL/lib/mysqlrouter/private
EOF
# 使配置生效
ldconfig
验证关键库是否加载成功:
bash复制ldconfig -p | grep libprotobuf
这个步骤确保了GreatSQL运行时能够找到其依赖的特殊优化库,避免出现"library not found"类错误。
GreatSQL的配置文件/etc/my.cnf是其运行的核心。以下是一个针对国产化环境优化的配置示例:
ini复制[client]
socket = /data/GreatSQL/mysql.sock
[mysqld]
# 基础配置
user = mysql
port = 3306
basedir = /usr/local/GreatSQL
datadir = /data/GreatSQL
socket = /data/GreatSQL/mysql.sock
character-set-server = UTF8MB4
lower_case_table_names = 0
# 性能优化
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 8
innodb_io_capacity = 10000
innodb_io_capacity_max = 20000
innodb_flush_method = O_DIRECT
# 连接控制
max_connections = 1024
thread_cache_size = 768
wait_timeout = 600
interactive_timeout = 600
# 二进制日志
binlog_format = ROW
sync_binlog = 1
binlog_expire_logs_seconds = 604800
关键参数说明:
lower_case_table_names=0:保持表名大小写敏感,这是国产数据库应用的常见需求innodb_flush_method=O_DIRECT:绕过OS缓存直接写入磁盘,提升性能innodb_io_capacity:根据国产SSD的性能特点设置合适的IO能力值为GreatSQL创建专用的系统账户和数据目录:
bash复制# 创建mysql用户组和用户
groupadd mysql
useradd -g mysql mysql -d /dev/null -s /sbin/nologin
# 创建数据目录并设置权限
mkdir -p /data/GreatSQL
chown -R mysql:mysql /data/GreatSQL
chmod -R 750 /data/GreatSQL
# 创建临时文件目录
mkdir -p /var/lib/mysql-files
chown mysql:mysql /var/lib/mysql-files
权限设置不当是安装失败的常见原因,务必确保:
创建/etc/systemd/system/greatsql.service文件:
ini复制[Unit]
Description=GreatSQL Server
After=network.target
[Service]
User=mysql
Group=mysql
Type=notify
TimeoutSec=10
ExecStartPre=/usr/local/GreatSQL/bin/mysqld_pre_systemd
ExecStart=/usr/local/GreatSQL/bin/mysqld $MYSQLD_OPTS
Restart=on-failure
RestartPreventExitStatus=1
# 资源限制
LimitNOFILE=65535
LimitNPROC=65535
LimitMEMLOCK=infinity
加载并启用服务:
bash复制systemctl daemon-reload
systemctl enable greatsql
systemctl start greatsql
常见问题排查:
bash复制journalctl -u greatsql -b
tail -n 100 /data/GreatSQL/error.log
bash复制rm -rf /data/GreatSQL/*
systemctl start greatsql
bash复制netstat -tulnp | grep 3306
GreatSQL首次启动时会为root@localhost生成随机密码:
bash复制grep 'temporary password' /data/GreatSQL/error.log
输出类似:
code复制2023-08-29T06:23:14.123456Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: KO!pdiw5sJ
使用获取的临时密码登录并修改:
bash复制mysql -uroot -p"KO!pdiw5sJ"
在MySQL命令行中执行:
sql复制-- 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword';
-- 创建远程管理账户(可选)
CREATE USER 'admin'@'%' IDENTIFIED BY 'AdminPassword';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
安全建议:在生产环境中,应该限制远程访问IP,并使用SSL连接。GreatSQL默认启用了SSL支持,可以通过以下命令查看SSL状态:
sql复制SHOW VARIABLES LIKE '%ssl%';
安装完成后,建议进行简单的性能测试:
sql复制-- 创建测试数据库
CREATE DATABASE test_benchmark;
-- 使用sysbench进行测试(需先安装sysbench)
sysbench oltp_read_write \
--db-driver=mysql \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-user=root \
--mysql-password=YourPassword \
--mysql-db=test_benchmark \
--tables=10 \
--table-size=100000 \
prepare
GreatSQL推荐使用Percona XtraBackup进行物理备份:
bash复制# 安装XtraBackup
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
percona-release enable-only tools release
yum install -y percona-xtrabackup-80
# 执行全量备份
xtrabackup --backup --target-dir=/backups/full \
--user=root --password=YourPassword
GreatSQL内置了性能模式(Performance Schema),可以通过以下SQL启用监控:
sql复制-- 启用关键监控项
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES'
WHERE NAME LIKE '%lock%';
-- 配置监控采集
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME LIKE '%events%';
对于国产化环境,推荐使用Prometheus+Grafana配合GreatSQL exporter进行可视化监控。
问题1:服务无法启动,日志显示"Can't create/write to file"
setenforce 0临时关闭测试df -h /data问题2:连接数不足
sql复制-- 临时增加连接数
SET GLOBAL max_connections = 2000;
-- 永久修改需要调整my.cnf后重启
问题3:内存使用过高
SHOW ENGINE INNODB STATUS在国产化环境中部署GreatSQL时,硬件兼容性和性能调优需要特别关注。建议在正式上线前进行充分的压力测试,并根据实际硬件配置调整关键参数。GreatSQL在ARM架构的国产CPU上表现优异,但可能需要针对特定的芯片特性进行微调。