GreatSQL登陸Arch Linux:成功的資料庫安裝之旅

来源:https://www.cnblogs.com/greatsql/archive/2023/12/11/17894500.html
-Advertisement-
Play Games

瞭解Arch Linux Arch Linux是一個輕量、靈活、基於x86-64架構的Linux發行版,遵循K.I.S.S.原則。註重代碼正確、優雅和極簡主義,期待用戶能夠願意去理解系統的操作。 1.簡潔 Arch Linux將簡潔定義為:避免任何不必要的添加、修改和複雜增加。簡單來說,archli ...


瞭解Arch Linux

Arch Linux是一個輕量、靈活、基於x86-64架構的Linux發行版,遵循K.I.S.S.原則。註重代碼正確、優雅和極簡主義,期待用戶能夠願意去理解系統的操作。

1.簡潔

Arch Linux將簡潔定義為:避免任何不必要的添加、修改和複雜增加。簡單來說,archlinux 是一個可以讓用戶自己動手打造的操作系統。從安裝到管理,archlinux 放手讓用戶處理一切。

用戶可以自己決定使用哪種桌面環境、安裝哪些組件和服務。這種精細化的控制能夠賦予你一個精簡的操作系統,可以讓用戶自由選擇所需的組件來構建屬於用戶自己的系統。

2.滾動更新(現代)

滾動更新(rolling update)是指軟體開發中經常性將更新發送到軟體的概念。相較於滾動發行,有標準版本和小數點版本的版本號開發模式,必需通過重新安裝以取代先前的發行版。Arch Linux 是沒有版本概念的,它始終保持最新的狀態,通俗的理解就相當於把發行版比喻為一部車,ubuntu 更新就是換一部新的,而 Arch Linux就是把車裡面舊的配件換成新的。

Arch Linux是一個滾動發行版,這意味著:

  1. 新的內核和應用程式版本一經發佈,就會立即向用戶推送
  2. 當大多數其它 Linux 發行版還在提供舊的 Linux 內核版本時,Arch Linux會迅速向用戶提供最新的內核
  3. 而軟體也是如此。如果 Arch Linux倉庫中的軟體發佈了新版本,Arch Linux用戶通常會比其他用戶先獲得新版本
  4. 在滾動發行模式下,一切都是新鮮和前沿的。用戶不必把操作系統從一個版本升級到另一個版本,只要使用 pacman 的升級命令,便會始終保持最新的版本

3.實用

Arch Linux註重實用性,避免意識形態之爭。最終的設計決策都是由開發者的共識決定。開發者依賴基於事實的技術分析和討論,避免政治因素,不會被流行觀點左右。

Arch Linux的倉庫中包含大量的軟體包和編譯腳本。用戶可以按照需要自由選擇。倉庫中既提供了開源、自由的軟體,也提供了閉源軟體(大部分閉源軟體在 AUR 倉庫中)。實用性大於意識形態

4.激進的內核更新機制

Arch Linux在更新內核的時候會立即刪除舊內核(因為內核也是一個軟體包 linux / linux-zen...,由 pacman 更新)

立即刪除舊的內核要求 Arch Linux必須重啟來載入新的內核,否則容易發生詭異的問題。這是因為 Linux 所謂的“內核”包含有大量的動態載入模塊,如果在某次啟動後,某個模塊沒有被載入過,然後系統內核更新了並且刪除了舊的內核,那麼這些模塊將永遠不能被載入了——因為它們隨著舊內核被刪掉了。除非用戶重啟系統以完整切換到新的內核以使用新版的動態載入模塊。

5.軟體包管理體系

不同於 Debian 系列的 apt / dpkg 和 Red Hat 系列的 dnf(yum)/ rpm 包管理體系,Arch Linux只用了一個工具 pacman 就解決了獲取和安裝兩個功能。這降低了為 Arch Linux 製作軟體包的門檻,這也是 AUR 幾乎能涵蓋整個 Linux 軟體生態的主要原因。但是這也導致 pacman 不支持虛包(virtual package)。

更多介紹前往Arch Linux社區網站:https://www.archlinuxcn.org/

安裝Arch Linux

安裝Arch Linux的過程這裡就不再詳細介紹了,可以前往Arch Linux的官方文檔查看詳細的安裝流程:https://arch-linux.osrc.com/rookie/pre-install.html

下麵,我將展示成功安裝完成的Arch Linux環境

$ uname -a
Linux myarch 6.6.3-arch1-1 #1 SMP PREEMPT_DYNAMIC Wed, 29 Nov 2023 00:37:40 +0000 x86_64 GNU/Linux

$ neofetch
root@myarch 
----------- 
OS: Arch Linux x86_64 
Host: Latitude 5491 
Kernel: 6.6.3-arch1-1 
Uptime: 17 hours, 39 mins 
Packages: 187 (pacman) 
Shell: bash 5.2.21 
Resolution: 1920x1080 
Terminal: /dev/pts/0 
CPU: Intel i7-8850H (12) @ 4.300GHz 
GPU: Intel CoffeeLake-H GT2 [UHD Graphics 630] 
Memory: 239MiB / 15787MiB

$ lcc -version
ldd (GNU libc) 2.38

安裝GreatSQL

什麼是GreatSQL

GreatSQL是適用於金融級應用的國內自主開源資料庫,具備高性能、高可靠、高易用性、高安全等多個核心特性,可以作為MySQL或Percona Server的可選替換,用於線上生產環境,且完全免費並相容MySQL或Percona Server。

GreatSQL具備高性能高可靠高易用性高安全等多個核心特性。

選擇GreatSQL安裝包

因為Arch Linux系統自帶的ldd (GNU libc)版本是2.38,所以這裡下載的GreatSQL二進位包選擇

  • GreatSQL-8.0.32-24-Linux-glibc2.28-x86_64.tar.xz

Arch Linux系統缺少wget所以我們需要先安裝wget

$ pacman -S wget

將二進位安裝包下載在/usr/local目錄下,並解壓

$ cd /usr/local
$ wget https://product.greatdb.com/GreatSQL-8.0.32-24/GreatSQL-8.0.32-24-Linux-glibc2.28-x86_64.tar.xz
# 解壓
$ tar xf GreatSQL-8.0.32-24-Linux-glibc2.28-x86_64.tar.xz

運行環境配置

因為Arch Linux系統主打極簡風,所以selinux和防火牆都沒有,我們都不需要手動關閉了:)

安裝依賴包

Arch Linux用了一個工具 pacman 作為下載軟體包

進入到GreatSQL-8.0.32-24-Linux-glibc2.28-x86_64/bin目錄,輸入命令ldd mysqld mysql | grep "not found"若不顯示其它信息則已經不缺必要軟體包

這裡我缺失了兩個依賴包

libaio.so.1 => not found
libnuma.so.1 => not found

使用pacman安裝libaio和numactl

$ pacman -S libaio
$ pacman -S numactl

最後檢查下若不顯示其它信息則已經不缺必要軟體包

$ ldd mysqld mysql | grep "not found"

創建配置文件及新建用戶與目錄

可根據實際情況修改,一般主要涉及資料庫文件分區、目錄,記憶體配置等少數幾個選項。以下麵這份為例

註意,若記憶體不夠充足請調低 innodb_buffer_pool_size

$ vi /etc/my.cnf
[client]
socket  = /data/GreatSQL/mysql.sock

[mysqld]
user    = mysql
port    = 3306
#主從複製或MGR集群中,server_id記得要不同
#另外,實例啟動時會生成 auto.cnf,裡面的 server_uuid 值也要不同
#server_uuid的值還可以自己手動指定,只要符合uuid的格式標準就可以
server_id = 3306
basedir = /usr/local/GreatSQL-8.0.32-24-Linux-glibc2.28-x86_64
datadir = /data/GreatSQL
socket  = /data/GreatSQL/mysql.sock
pid-file = mysql.pid
character-set-server = UTF8MB4
skip_name_resolve = 1
#若你的MySQL資料庫主要運行在境外,請務必根據實際情況調整本參數
default_time_zone = "+8:00"

#performance setttings
lock_wait_timeout = 3600
open_files_limit    = 65535
back_log = 1024
max_connections = 512
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
thread_stack = 512K
sort_buffer_size = 4M
join_buffer_size = 4M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
thread_cache_size = 768
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 32M
max_heap_table_size = 32M
max_allowed_packet = 64M
net_buffer_shrink_interval = 180
#GIPK
loose-sql_generate_invisible_primary_key = ON

#log settings
log_timestamps = SYSTEM
log_error = error.log
log_error_verbosity = 3
slow_query_log = 1
log_slow_extra = 1
slow_query_log_file = slow.log
#設置slow log文件大小1G及總文件數10
max_slowlog_size = 1073741824
max_slowlog_files = 10
long_query_time = 0.1
log_queries_not_using_indexes = 1
log_throttle_queries_not_using_indexes = 60
min_examined_row_limit = 100
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_bin = binlog
binlog_format = ROW
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
#控制binlog總大小,避免磁碟空間被撐爆
binlog_space_limit = 500G
binlog_rows_query_log_events = 1
binlog_expire_logs_seconds = 604800
#MySQL 8.0.22前,想啟用MGR的話,需要設置binlog_checksum=NONE才行
binlog_checksum = CRC32
gtid_mode = ON
enforce_gtid_consistency = TRUE

#myisam settings
key_buffer_size = 32M
myisam_sort_buffer_size = 128M

#replication settings
relay_log_recovery = 1
slave_parallel_type = LOGICAL_CLOCK
#可以設置為邏輯CPU數量的2倍
slave_parallel_workers = 64
binlog_transaction_dependency_tracking = WRITESET
slave_preserve_commit_order = 1
slave_checkpoint_period = 2

#innodb settings
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 8
innodb_data_file_path = ibdata1:12M:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 3
innodb_redo_log_capacity = 6G
innodb_max_undo_log_size = 4G
# 根據您的伺服器IOPS能力適當調整
# 一般配普通SSD盤的話,可以調整到 10000 - 20000
# 配置高端PCIe SSD卡的話,則可以調整的更高,比如 50000 - 80000
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_open_files = 65535
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_online_alter_log_max_size = 4G
innodb_print_ddl_logs = 0
innodb_status_file = 1
#註意: 開啟 innodb_status_output & innodb_status_output_locks 後, 可能會導致log_error文件增長較快
innodb_status_output = 0
innodb_status_output_locks = 1
innodb_sort_buffer_size = 67108864
innodb_adaptive_hash_index = 0
#開啟NUMA支持
innodb_numa_interleave = ON
innodb_print_lock_wait_timeout_info = 1
#自動殺掉超過5分鐘不活躍事務,避免行鎖被長時間持有
kill_idle_transaction = 300

#innodb parallel query
loose-force_parallel_execute = OFF
loose-parallel_default_dop = 8
loose-parallel_max_threads = 96
temptable_max_ram = 8G

#pfs settings
performance_schema = 1
#performance_schema_instrument = '%memory%=on'
performance_schema_instrument = '%lock%=on'

接下來新建mysql用戶和新建資料庫主目錄,並修改許可權模式及屬主

$ /sbin/groupadd mysql
$ /sbin/useradd -g mysql mysql -d /dev/null -s /sbin/nologin
$ mkdir -p /data/GreatSQL
$ chown -R mysql:mysql /data/GreatSQL
$ chmod -R 700 /data/GreatSQL

如果是在一個全新環境中首次啟動GreatSQL資料庫,可能會失敗,因為在 mysqld_pre_systemd 的初始化處理邏輯中,需要依賴 /var/lib/mysql-files 目錄保存一個臨時文件

所以我們手動創建/var/lib/mysql-files 目錄

$ mkdir -p /var/lib/mysql-files && chown -R mysql:mysql /var/lib/mysql-files

增加GreatSQL系統服務

$ vim /lib/systemd/system/greatsql.service
[Unit]
Description=GreatSQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]

# some limits
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=65535
# processes/threads
LimitNPROC=65535
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false

User=mysql
Group=mysql
#如果是GreatSQL 5.7版本,此處需要改成simple模式,否則可能服務啟用異常
#如果是GreatSQL 8.0版本則可以使用notify模式
#Type=simple
Type=notify
TimeoutSec=0
PermissionsStartOnly=true
ExecStartPre=/usr/local/GreatSQL-8.0.32-24-Linux-glibc2.28-x86_64/bin/mysqld_pre_systemd
ExecStart=/usr/local/GreatSQL-8.0.32-24-Linux-glibc2.28-x86_64/bin/mysqld $MYSQLD_OPTS
EnvironmentFile=-/etc/sysconfig/mysql
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false

啟動GreatSQL

把GreatSQL添加進環境變數

$ echo 'export PATH=/usr/local/GreatSQL-8.0.32-24-Linux-glibc2.28-x86_64/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile

執行下麵的命令啟動GreatSQL服務

$ systemctl start greatsql
$ systemctl status greatsql
● greatsql.service - GreatSQL Server
     Loaded: loaded (/usr/lib/systemd/system/greatsql.service; disabled; preset: disabled)
     Active: active (running) since Fri 2023-12-01 10:30:29 CST; 4s ago
       Docs: man:mysqld(8)
             http://dev.mysql.com/doc/refman/en/using-systemd.html
    Process: 712571 ExecStartPre=/usr/local/GreatSQL-8.0.32-24-Linux-glibc2.28-x86_64/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
   Main PID: 712708 (mysqld)
     Status: "Server is operational"
     Memory: 2.5G
        CPU: 4.549s
     CGroup: /system.slice/greatsql.service
             └─712708 /usr/local/GreatSQL-8.0.32-24-Linux-glibc2.28-x86_64/bin/mysqld

Dec 01 10:30:24 myarch systemd[1]: Starting GreatSQL Server...
Dec 01 10:30:28 myarch (mysqld)[712708]: greatsql.service: Referenced but unset environment variable evaluates to an empty string: MYSQLD_OPTS
Dec 01 10:30:29 myarch systemd[1]: Started GreatSQL Server.

在上面進行GreatSQL初始化時,會為 root@localhost 用戶生成一個隨機密碼,記錄在 error.log 日誌文件中,例如下麵這樣:

$ grep -i root /data/GreatSQL/error.log
... A temporary password is generated for root@localhost: ji!pjndiw5sJ

複製該密碼,將用於首次登入GreatSQL所需。

$ mysql -uroot -p
Enter password:

# 進入資料庫後可以看到版本
Server version: 8.0.32-24

首次登入立刻提醒該密碼已過期,需要修改,執行類似下麵的命令修改即可:

greatsql> alter user 'root'@'localhost' identified by 'GreatSQL@2022';
Query OK, 0 rows affected (0.02 sec)

GreatSQL資料庫安裝並初始化完畢

安裝MySQL Shell

為了支持仲裁節點特性,需要安裝GreatSQL提供的MySQL Shell發行包。打開GreatSQL下載頁面找到

  • greatsql-shell-8.0.25-16-Linux-glibc2.28-x86_64.tar.xz

下載相應的MySQL Shell安裝包(目前只提供二進位安裝包)並解壓

$ cd /usr/local
$ wget https://product.greatdb.com/GreatSQL-8.0.25-16/greatsql-shell-8.0.25-16-Linux-glibc2.28-x86_64.tar.xz
$ tar xf greatsql-shell-8.0.25-16-Linux-glibc2.28-x86_64.tar.xz

進入bin目錄查看下缺少什麼依賴

$ cd /usr/local/greatsql-shell-8.0.25-16-Linux-glibc2.28-x86_64/bin
$ ldd mysqlsh | grep "not found"
        libssl.so.1.1 => not found
        libcrypto.so.1.1 => not found
        libpython3.8.so.1.0 => not found

安裝上缺失的依賴

$ pacman -S core/openssl-1.1
$ pacman -S archlinuxcn/python39

因為下載的Python版本過高,所以採用軟連接的方式

$ ln -s /usr/lib/libpython3.9.so.1.0 /usr/lib64/libpython3.8.so.1.0

再次檢查下還有沒有缺失依賴

$ ldd mysqlsh | grep "not found"

沒有缺失依賴的話,接下來就可以體驗MySQL Shell了

$ /usr/local/greatsql-shell-8.0.25-16-Linux-glibc2.28-x86_64/bin/mysqlsh
MySQL Shell 8.0.25

Copyright (c) 2016, 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 '\?' for help; '\quit' to exit.
WARNING: Found errors loading plugins, for more details look at the log at: /root/.mysqlsh/mysqlsh.log
 MySQL  Py > 

更多的Shell玩法請移步 圖文結合丨帶你輕鬆玩轉MySQL Shell for GreatSQL https://mp.weixin.qq.com/s/lHTcqFom8QpK2AFtFobdDw

至此,GreatSQL在Arch Linux的成功安裝之旅圓滿結束。現在,您可以盡情感受GreatSQL資料庫帶來體驗

Enjoy GreatSQL

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一年又快結束,疫情似乎已經離去,但是最近的感冒又讓人感受到了一絲不安~ 回顧著過往幾年,一個詞形容:渾渾噩噩。 總結著 2023 年,有開心,有憧憬,有遺憾,有成長,但如果用一個詞的話,我覺得是:尋找 ...
  • BouncyCastle 是一個流行的 Java 加解密庫,也支持在 .NET 平臺上使用。下麵是 BouncyCastle 在 .NET 下使用的一些常見功能,包括 AES、RSA、MD5、SHA1、DES、SHA256、SHA384、SHA512 等。 在開始之前,請確保你已經將 BouncyC ...
  • 在 C# 中,可以使用不同的方法調用內部或私有方法。下麵分別介紹通過反射、MethodInfo.CreateDelegate、表達式(樹)、動態方法(call)、動態方法(calli)這五種方法。 1. 通過反射方法 使用反射可以訪問和調用內部或私有方法。 using System; using S ...
  • 前言 windows 電腦 連接藍牙耳機沒有麥克風,明明已經顯示麥克風圖標,為什麼錄製不到聲音 原因 電腦連藍牙耳機有兩個模式:Hand-free和Stereo。Hand-Free是可以語音通話的,但是音質沒有那麼好;Stereo是立體聲模式,音效很好,但是無法使用麥克風。 解決辦法 依次打開:控制 ...
  • 普通用戶許可權超算集群安裝OpenFOAM-LIGGGHTS-CFDEM,由於缺少root許可權,無法根據CFDEM官方instruction進行安裝。 本文以CSU超算平臺為例,利用普通用戶許可權進行編譯安裝。文章修正了已有教程中部分問題,特別感謝希望先生與記得小蘋初見教程。 1. 安裝必要依賴包 此部 ...
  • 1 準備工作 1.1 環境準備 操作系統:Microsoft Windows 10 專業工作站版 軟體版本:Python 3.9.6 第三方包: pip install pandas2.1.0 pip install pymysql1.1.0 pip install sqlalchemy==2.0. ...
  • 目錄JDBC建表用法示例JDBC表函數資料分享參考文章 JDBC 允許CH通過JDBC連接到外部資料庫。 要實現JDBC連接,CH需要使用以後臺進程運行的程式 clickhouse-jdbc-bridge。 該引擎支持Nullable數據類型。 建表 CREATE TABLE [IF NOT EXI ...
  • 本文將介紹使用DataX讀出Cos的Orc文件往StarRocks裡面寫。 需求: 需要將騰訊雲cos上84TB的數據, 同步到StarRocks某個大表。正常每個分區數據量20~30億,600GB。 工具:DataX插件:hdfsreader、starrockswriter對象存儲COS:非融合 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...