查看系统信息
[root@GreatSQL01 ~]# cat /etc/anolis-release
Anolis OS release 8.9
[root@GreatSQL01 ~]# getconf GNU_LIBC_VERSION
glibc 2.28
[root@GreatSQL01 ~]#
关闭防火墙
[root@GreatSQL01 ~]# systemctl stop firewalld ; systemctl disable firewalld Removed /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@GreatSQL01 ~]#
关闭selinux
[root@GreatSQL01 ~]# setenforce 0 ;sed -i '/^SELINUX=/c'SELINUX=disabled /etc/selinux/config setenforce: SELinux is disabled [root@GreatSQL01 ~]#
修改磁盘IO调度算法
SSD或高速缓存设备选择noop,机械磁盘选择deadline
[root@GreatSQL01 ~]# cat /sys/block/sda/queue/scheduler [none] mq-deadline kyber bfq [root@GreatSQL01 ~]# echo mq-deadline > /sys/block/sda/queue/scheduler [root@GreatSQL01 ~]# cat /sys/block/sda/queue/scheduler [mq-deadline] kyber bfq none [root@GreatSQL01 ~]# echo "echo mq-deadline > /sys/block/sda/queue/scheduler" >> /etc/rc.local
确认CPU性能模式设置
cpupower frequency-info --policy
注意 如果输出内容不是 The governor “performance” 而是 The governor “powersave” 的话,则要注意了。 The governor “powersave” 表示 cpufreq 的节能策略使用 powersave,需要调整为 performance 策略。 如果是虚拟机或者云主机,则不需要调整,命令输出通常为 Unable to determine current policy。
关闭透明大页
[root@GreatSQL01 ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled [root@GreatSQL01 ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag [root@GreatSQL01 ~]# echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local [root@GreatSQL01 ~]# echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.local [root@GreatSQL01 ~]#
内核优化
echo "fs.file-max = 1000000" >> /etc/sysctl.conf
echo "net.core.somaxconn = 32768" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 0" >> /etc/sysctl.conf
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
echo "vm.swappiness = 3" >> /etc/sysctl.conf
sysctl -p
修改mysql用户使用资源上限
[root@GreatSQL01 ~]# echo -e "mysql soft nofile 65535\nmysql hard nofile 65535\nmysql soft stack 32768\nmysql hard stack 32768\nmysql soft nproc 65535\nmysql hard nproc 65535" | tee -a /etc/security/limits.conf mysql soft nofile 65535 mysql hard nofile 65535 mysql soft stack 32768 mysql hard stack 32768 mysql soft nproc 65535 mysql hard nproc 65535
安装依赖包
yum install -y wget unzip telnet lrzsz mlocate pkg-config perl libaio-devel numactl-devel numactl-libs net-tools perf sysstat iotop tmux openssl openssl-devel perl-Data-Dumper perl-Digest-MD5 python2 perl-JSON perl-Test-Simple
启动MySQL时加载 jemalloc 动态库
yum install -y epel-release
yum -y install jemalloc jemalloc-devel
建议采用Jemalloc代替glibc自带的malloc库,其优势在于减少内存碎片和提升高并发场景下内存的分配效率,提高内存管理效率的同时还能降低数据库运行时发生OOM的风险。
添加/修改系统文件 /etc/sysconfig/mysql:
LD_PRELOAD=/usr/lib64/libjemalloc.so THP_SETTING=never
配置NTP服务器
yum install chrony -y
配置chrony并重启
vi /etc/chrony.conf systemctl restart chronyd systemctl enable chronyd
查看同步状态
chronyc sources -v
下载安装介质
wget https://product.greatdb.com/GreatSQL-8.0.32-26/GreatSQL-8.0.32-26-Linux-glibc2.28-x86_64.tar.xz
生产环境需配置数据盘
LABEL=/data /data xfs defaults,noatime,nodiratime,inode64 0 0
解压安装介质
tar -xvf GreatSQL-8.0.32-26-Linux-glibc2.28-x86_64.tar.xz -C /data
mv /data/GreatSQL-8.0.32-26-Linux-glibc2.28-x86_64 /data/GreatSQL
创建MySQL用户及用户组
groupadd mysql useradd -r -g mysql -s /bin/false mysql
创建目录并授权
mkdir -p /data/GreatSQL/data chown mysql:mysql /data/GreatSQL/data
设置环境变量
export PATH=$PATH:/data/GreatSQL/bin
echo 'export PATH=$PATH:/data/GreatSQL/bin' >> ~/.bash_profile
配置 /etc/my.cnf 配置文件
[client]
socket = /data/GreatSQL/data/mysql.sock
[mysql]
loose-skip-binary-as-hex
prompt = "(\\D)[\\u@GreatSQL][\\d]>"
no-auto-rehash
[mysqld]
user = mysql
port = 3306
server_id = 3306
basedir = /data/GreatSQL
datadir = /data/GreatSQL/data
socket = /data/GreatSQL/data/mysql.sock
pid-file = mysql.pid
character-set-server = UTF8MB4
skip_name_resolve = ON
default_time_zone = "+8:00"
bind_address = "0.0.0.0"
secure_file_priv = /data/GreatSQL/data
# Performance
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
sql_generate_invisible_primary_key = ON
loose-lock_ddl_polling_mode = ON
loose-lock_ddl_polling_runtime = 200
# Logs
log_timestamps = SYSTEM
log_error = error.log
log_error_verbosity = 3
slow_query_log = ON
log_slow_extra = ON
slow_query_log_file = slow.log
long_query_time = 0.01
log_queries_not_using_indexes = ON
log_throttle_queries_not_using_indexes = 60
min_examined_row_limit = 100
log_slow_admin_statements = ON
log_slow_replica_statements = ON
log_slow_verbosity = FULL
log_bin = binlog
binlog_format = ROW
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
binlog_space_limit = 500G
binlog_rows_query_log_events = ON
binlog_expire_logs_seconds = 604800
binlog_checksum = CRC32
gtid_mode = ON
enforce_gtid_consistency = ON
# Replication
relay-log = relaylog
relay_log_recovery = ON
replica_parallel_type = LOGICAL_CLOCK
replica_parallel_workers = 4
binlog_transaction_dependency_tracking = WRITESET
replica_preserve_commit_order = ON
replica_checkpoint_period = 2
loose-rpl_read_binlog_speed_limit = 100
# MGR
loose-plugin_load_add = 'mysql_clone.so'
loose-plugin_load_add = 'group_replication.so'
loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"
loose-group_replication_local_address = "192.168.116.41:33061"
loose-group_replication_group_seeds = "192.168.116.41:33061,192.168.116.42:33061,192.168.116.43:33061"
loose-group_replication_communication_stack = "XCOM"
loose-group_replication_recovery_use_ssl = OFF
loose-group_replication_ssl_mode = DISABLED
loose-group_replication_start_on_boot = OFF
loose-group_replication_bootstrap_group = OFF
loose-group_replication_exit_state_action = READ_ONLY
loose-group_replication_flow_control_mode = "DISABLED"
loose-group_replication_single_primary_mode = ON
loose-group_replication_enforce_update_everywhere_checks = OFF
loose-group_replication_majority_after_mode = ON
loose-group_replication_communication_max_message_size = 10M
loose-group_replication_arbitrator = OFF
loose-group_replication_single_primary_fast_mode = 1
loose-group_replication_request_time_threshold = 100
loose-group_replication_primary_election_mode = GTID_FIRST
loose-group_replication_unreachable_majority_timeout = 0
loose-group_replication_member_expel_timeout = 5
loose-group_replication_autorejoin_tries = 288
loose-group_replication_recovery_get_public_key = ON
loose-group_replication_donor_threshold = 100
report_host = "192.168.116.41"
# InnoDB
innodb_buffer_pool_size = 1G
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_redo_log_capacity = 6G
innodb_doublewrite_files = 2
innodb_max_undo_log_size = 4G
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 = ON
innodb_print_all_deadlocks = ON
innodb_online_alter_log_max_size = 4G
innodb_print_ddl_logs = ON
innodb_status_file = ON
innodb_status_output = OFF
innodb_status_output_locks = ON
innodb_sort_buffer_size = 64M
innodb_adaptive_hash_index = OFF
innodb_numa_interleave = OFF
innodb_spin_wait_delay = 20
innodb_print_lock_wait_timeout_info = ON
innodb_change_buffering = none
kill_idle_transaction = 300
innodb_data_file_async_purge = ON
#innodb monitor settings
#innodb_monitor_enable = "module_innodb,module_server,module_dml,module_ddl,module_trx,module_os,module_purge,module_log,module_lock,module_buffer,module_index,module_ibuf_system,module_buffer_page,module_adaptive_hash"
#pfs settings
performance_schema = 1
#performance_schema_instrument = '%memory%=on'
performance_schema_instrument = '%lock%=on'
vi /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
Type=notify
TimeoutSec=0
PermissionsStartOnly=true
ExecStartPre=/data/GreatSQL/bin/mysqld_pre_systemd
ExecStart=/data/GreatSQL/bin/mysqld $MYSQLD_OPTS
EnvironmentFile=-/etc/sysconfig/mysql
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false
修改脚本
sed -i 's#/usr/local/GreatSQL-8.0.32-26-Linux-glibc2.28-x86_64#/data/GreatSQL#g' /data/GreatSQL/bin/mysqld_pre_systemd
sed -i 's#/var/lib#/data/GreatSQL#g' /data/GreatSQL/bin/mysqld_pre_systemd
sed -i 's#/var/log/mysql#/data/GreatSQL/data#g' /data/GreatSQL/bin/mysqld_pre_systemd
执行命令重载systemd,加入 greatsql 服务,如果没问题就不会报错:
systemctl daemon-reload
启动GreatSQL
systemctl start greatsql
登录GreatSQL
[root@GreatSQL01 data]# grep -i root /data/GreatSQL/data/error.log
2024-09-29T15:47:51.098861+08:00 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Kpw-WNar2q9r
[root@GreatSQL01 data]# mysql -uroot -p"Kpw-WNar2q9r"
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.32-26
Copyright (c) 2021-2024 GreatDB Software Co., Ltd
Copyright (c) 2009-2024 Percona LLC and/or its affiliates
Copyright (c) 2000, 2024, 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 '\h' for help. Type '\c' to clear the current input statement.
(Sun Sep 29 16:03:57 2024)[root@GreatSQL][(none)]>
(Sun Sep 29 16:03:58 2024)[root@GreatSQL][(none)]>
(Sun Sep 29 16:03:58 2024)[root@GreatSQL][(none)]>show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
(Sun Sep 29 16:04:09 2024)[root@GreatSQL][(none)]>ALTER USER root@'localhost' IDENTIFIED BY 'GreatSQL@2024';
Query OK, 0 rows affected (0.01 sec)
(Sun Sep 29 16:05:29 2024)[root@GreatSQL][(none)]>status;
--------------
mysql Ver 8.0.32-26 for Linux on x86_64 (GreatSQL, Release 26, Revision a68b3034c3d)
Connection id: 10
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.32-26
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /data/GreatSQL/data/mysql.sock
Uptime: 14 min 49 sec
Threads: 4 Questions: 12 Slow queries: 0 Opens: 134 Flush tables: 3 Open tables: 51 Queries per second avg: 0.013
--------------
(Sun Sep 29 16:06:46 2024)[root@GreatSQL][(none)]>
GreatSQL数据库安装并初始化完毕。
最后修改时间:2024-10-08 20:56:31
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




