轉自王偉博客,記錄 MariaDB 10.0.17 原始碼編譯安裝、配置檔優化、多源複制(Multi-Source Replication)配置要點,適合分庫分表匯總統計場景。
# 下載
wget https://mirrors.opencas.cn/mariadb/mariadb-10.0.17/source/mariadb-10.0.17.tar.gz
tar -zxf mariadb-10.0.17.tar.gz
cd mariadb-10.0.17
# CMake 配置(含線程池、關閉 NUMA)
cmake . \
-DCMAKE_INSTALL_PREFIX=/data/mariadb \
-DMYSQL_DATADIR=/data/mariadb/data \
-DSYSCONFDIR=/data/mariadb/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_UNIX_ADDR=/data/mariadb/tmp/mysql.sock \
-DENABLED_LOCAL_INFILE=ON \
-DENABLED_PROFILING=ON \
-DWITH_DEBUG=0 \
-DMYSQL_TCP_PORT=3306
# 編譯安裝
make && make install
[mysqld]
port=3306
bind-address=0.0.0.0
lower_case_table_names=1
basedir=/data/mariadb
datadir=/data/mariadb/data
tmpdir=/data/mariadb/tmp
socket=/data/mariadb/tmp/mysql.sock
# 日誌
log-output=FILE
log-error=/data/mariadb/log/error.log
slow-query-log=1
slow_query_log_file=/data/mariadb/log/slow.log
long_query_time=0.1
sync_binlog=1
skip-external-locking
skip-name-resolve
default-storage-engine=INNODB
character-set-server=utf8
# 連線與緩衝
wait_timeout=28800
back_log=1024
max_connections=1000
max_user_connections=0
max_connect_errors=100
thread_concurrency=16
thread_cache_size=512
table_open_cache=16384
table_definition_cache=16384
sort_buffer_size=2M
join_buffer_size=2M
read_buffer_size=4M
read_rnd_buffer_size=4M
key_buffer_size=64M
myisam_sort_buffer_size=64M
tmp_table_size=256M
max_heap_table_size=256M
open_files_limit=65535
# 複制
server-id=1
report-host=172.16.183.56
log-bin=mysql-bin
binlog_format=MIXED
expire_logs_days=7
relay-log=relay-log
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
log-slave-updates=1
skip-slave-start
relay-log-recovery=1
# InnoDB 核心
innodb_data_home_dir=/data/mariadb/data
innodb_data_file_path=ibdata1:2G;ibdata2:2G:autoextend
innodb_autoextend_increment=500
innodb_log_group_home_dir=/data/mariadb/data
innodb_buffer_pool_size=8G
innodb_buffer_pool_dump_at_shutdown=1
innodb_buffer_pool_load_at_startup=1
innodb_buffer_pool_instances=8
innodb_additional_mem_pool_size=128M
innodb_log_files_in_group=3
innodb_log_file_size=512M
innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=120
innodb_flush_method=O_DIRECT
innodb_max_dirty_pages_pct=75
innodb_io_capacity=1000
innodb_thread_concurrency=0
innodb_thread_sleep_delay=500
innodb_concurrency_tickets=1000
innodb_open_files=65535
innodb_file_per_table=1
# 線程池(MariaDB/Percona 專屬,高併發神器)
thread_handling=pool-of-threads
# 關閉 NUMA(跨節點記憶體訪問優化)
innodb_buffer_pool_populate=1
[mysqld_safe]
flush_caches
numa_interleave
/data/mariadb/scripts/mysql_install_db \
--basedir=/data/mariadb --datadir=/data/mariadb/data \
--defaults-file=/data/mariadb/etc/my.cnf --user=mysql
/data/mariadb/bin/mysqld_safe --defaults-file=/data/mariadb/etc/my.cnf --user=mysql &
# 開機自啟
echo "/data/mariadb/bin/mysqld_safe --defaults-file=/data/mariadb/etc/my.cnf --user=mysql &" >> /etc/rc.local
CHANGE MASTER TO ... FOR CHANNEL 'channel_name'新版本雖有吸引人特性(多源複制、線程池),但「坑未踩完、資料少、生產環境慎用」。
主流穩定版仍為 MySQL/Percona/MariaDB 5.5/5.6 系列。除非有明確特性需求(如多源複制),否則優先選擇長期支援版本。