mysql-server-8.0.25的my.cnf详解

##############################

创建用户和用户组:

groupadd work

useradd work

 

 

准备目录:

mkdir -p /home/work/mysql_3306
mkdir -p /home/work/mysql_3306/data
mkdir -p /home/work/mysql_3306/etc
mkdir -p /home/work/mysql_3306/tmp
mkdir -p /home/work/mysql_3306/log
mkdir -p /home/work/mysql_3306/binlog

 

 

 

 下载:

https://dev.mysql.com/downloads/mysql/

 选择:mysql-boost-8.0.32.tar.gz

 

 安装依赖包:

yum -y update
yum -y install  ncurses ncurses-devel wget make  cmake cmake3  perl gcc gcc-c++ autoconf automake zlib libxml2 libxml2-devel libgcrypt libtool bison bison-devel  devtoolset-10-gcc devtoolset-10-gcc-c++ devtoolset-10-binutils openssl openssl-devel perl perl-devel libaio libaio-devel


 
#启用新版Gcc;
scl enable devtoolset-10 bash

 

设置cmake为cmake3:

mv /usr/bin/cmake  /usr/bin/cmake.bak
ln -s /usr/bin/cmake3 /usr/bin/cmake

 

 

 

解压:

# tar -pxzvf mysql-boost-8.0.32.tar.gz

mysql-8.0.32

 

 

预编译:

cmake . 
-DCMAKE_INSTALL_PREFIX=/home/work/mysql_3306
-DMYSQL_DATADIR=/home/work/mysql_3306/data
-DSYSCONFDIR=/home/work/mysql_3306/etc   
-DWITH_BOOST=boost
-DDEFAULT_CHARSET=utf8 
-DDEFAULT_COLLATION=utf8_general_ci 
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii 
-DWITH_MYISAM_STORAGE_ENGINE=1 
-DWITH_INNOBASE_STORAGE_ENGINE=1 
-DMYSQL_TCP_PORT=3306 
-DENABLED_LOCAL_INFILE=1 
-DWITH_EMBEDDED_SERVER=OFF  
-DENABLED_LOCAL_INFILE=1 
-DWITH_PARTITION_STORAGE_ENGINE=1 
-DWITH_FEDERATED_STORAGE_ENGINE=1 
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 
-DWITH_FAST_MUTEXES=1 
-DWITH_DEBUG=0 
-DWITH_EMBEDDED_SERVER=1 
-DFORCE_INSOURCE_BUILD=1

 

 编译:

 make -j4

 

安装:

make -j4 install

 

 

初始化:

/home/work/mysql_3306/bin/mysqld --defaults-file=/home/work/mysql_3306/etc/my.cnf --initialize --basedir=/home/work/mysql_3306 --datadir=/home/work/mysql_3306/data --user=work

 

启动:

/home/work/mysql_3306/bin/mysqld --defaults-file=/home/work/mysql_3306/etc/my.cnf &

 

配置文件my.cnf如下: 


 

 

 

 

 

 安装validate_password 插件:

mysql> show variables like 'validate%';
Empty set (0.02 sec)

mysql> INSTALL COMPONENT 'file://component_validate_password';
Query OK, 0 rows affected (0.01 sec)

mysql> show variables like 'validate%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.01 sec)

 

 

 

 

 

mysql_native_password密码模式:

1.创建使用mysql_native_password密码模式的账号:


create
user 'dba'@'%' identified with mysql_native_password by 'dba';

 

2.将已有的账号采用mysql_native_password密码模式:

# 已存在的账号

alter user 'dba'@'%' identified with mysql_native_password by 'dba';

 

3.my.cnf 配置默认的密码模式:

[mysqld]
default_authentication_plugin=mysql_native_password

 

4.授权也不能兼并创建账号了,只能授权

grant all privileges on *.* to 'root'@'%' with grant option;

 

默认编码

[client]
default_character_set=utf8mb4
 
[mysql]
default_character_set=utf8mb4
 
[mysqld]
default_authentication_plugin=mysql_native_password
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci

 

远程访问

1.my.conf 注释掉本地监听

[mysqld]
#bind_address=127.0.0.1

 

2.更新账号的 host

update mysql.user set host='%' where user='root';

 

 

 

my.cnf配置模板

[client]
default_character_set=utf8mb4
port = 3306
socket = /home/work/mysql_3306/tmp/mysql.sock


[mysql]
default_character_set=utf8mb4

[mysqld]
                                                   # 在mysql8.0以上版本默认为caching_sha2_password,为了与mysql5.7版本兼容,设为
default_authentication_plugin=mysql_native_password
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
user    = work
port = 3306
basedir = /home/work/mysql_3306
datadir = /home/work/mysql_3306/data
tmpdir = /home/work/mysql_3306/tmp
socket = /home/work/mysql_3306/tmp/mysql.sock
pid_file = /home/work/mysql_3306/tmp/mysql.pid
log-error = /home/work/mysql_3306/log/error.log
general_log = /home/work/mysql_3306/log/general.log
slow_query_log_file = /home/work/mysql_3306/log/slow.log
log-bin = /home/work/mysql_3306/binlog/mysql-bin
innodb_log_group_home_dir=/home/work/mysql_3306/data
innodb_undo_directory=/home/work/mysql_3306/data


default-time-zone = "+08:00"
performance_schema = 1
log_slave_updates
log_timestamps = SYSTEM
slow_query_log
long_query_time = 0.5
lock_wait_timeout    = 120# 注意:mysql8.0以上版本的sql_mode没有NO_AUTO_CREATE_USER这个值。
sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
table_open_cache_instances = 16 
##################################
optimizer_switch='index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,subquery_materialization_cost_based=on,use_index_extensions=on'
super_read_only = off 
log_slow_slave_statements = on
log_slow_admin_statements = on
event-scheduler = off 
back_log = 1000 
skip_name_resolve
max_connections = 10240
max_user_connections = 4000
max_connect_errors = 1000
table_open_cache = 8192 
table_definition_cache = 65535
max_allowed_packet = 64M 
expire_logs_days = 7
max_heap_table_size = 1024M 
read_rnd_buffer_size = 512K 
group_concat_max_len = 1024000
sort_buffer_size = 256K 
read_buffer_size = 64K
join_buffer_size = 128K 
thread_cache_size = 256 
ft_min_word_len = 4 
default-storage-engine = INNODB
thread_stack = 192K 
transaction_isolation = REPEATABLE-READ
tmp_table_size = 1024M 
open_files_limit = 65536 
key_buffer_size = 32M 
bulk_insert_buffer_size = 64M 
myisam_sort_buffer_size = 128M 
myisam_max_sort_file_size = 1G 
max_allowed_packet = 64M
max_prepared_stmt_count = 1000000
#-----------------------------------------------------------------
#replication
server-id = 4545454545
binlog_rows_query_log_events = on 
log-slave-updates = 1
relay-log = relay-bin
#这个参数一般用在主主同步中,用来错开自增值, 防止键值冲突
#auto_increment_offset = 1           
#这个参数一般用在主主同步中,用来错开自增值, 防止键值冲突
# auto_increment_increment = 1   
#####################必须集群内互相兼容,建议全都保持一致并为 row
binlog_format = row

# Last_IO_Error: Got fatal error 1236 from master when reading data from binary log:Slave can not handle replication events with the checksum that master is configured to log; 
# the first event ‘mysql-bin.000001’ at 451, the last event read from ‘./mysql-bin.000001’ at 451, the last byte read from ‘./mysql-bin.000001’ at 120.’
# 这就是binlog_checksum变量设置成none的原因,以免因为主从数据库的版本不一致出现这个错误。
binlog_checksum = none 

binlog_cache_size = 16M 
max_binlog_cache_size = 2G
sync_binlog = 1
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = on
sync_master_info = 10000
sync_relay_log_info = 10000
sync_relay_log = 0
#slave_net_timeout    = 4
#slave-parallel-type = LOGICAL_CLOCK
#slave-parallel-workers = 16
slave_pending_jobs_size_max = 134217728
slave_preserve_commit_order = 0

#################################
## 下面这两个搞不好会导致启动失败,搞清楚原理再使用
#transaction_write_set_extraction = XXHASH64
#binlog_transaction_dependency_tracking = WRITESET
#####################MySQL5.7.7之后,默认改成60秒。该参数定义了从库从主库获取数据等待的秒数,超过这个时间从库会主动退出读取,中断连接,并尝试重连。
#slave_net_timeout=8
###############mysql版本在5.6之后才有该选项。
gtid_mode = on
enforce-gtid-consistency = on
#
##############################################################################################半同步复制插件,需要安装。mysql5.7版本之后才有。
##########################################。安装插件在主库上:install plugin rpl_semi_sync_master soname 'semisync_master.so'; --安装 semisync_master.so插件 
##########################################。安装插件在从库上:install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; --安装 semisync_slave.so插件
#plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
################################半同步复制插件,需要安装。mysql5.7版本之后才有。
#rpl_semi_sync_master_enabled = on
################################半同步复制插件,需要安装。mysql5.7版本之后才有。
#rpl_semi_sync_slave_enabled = on
################################半同步复制插件,需要安装。mysql5.7版本之后才有。
#rpl_semi_sync_master_wait_for_slave_count = 1
################################半同步复制插件,需要安装。mysql5.7版本之后才有。
#rpl_semi_sync_master_timeout = 1000
################################半同步复制插件,需要安装。mysql5.7版本之后才有。
#rpl_semi_sync_master_wait_point = after_sync

 
#undo
innodb_max_undo_log_size = 1024M 
innodb_undo_log_truncate = on 
innodb_undo_tablespaces = 3 #只能在初始化的时候设置
innodb_purge_rseg_truncate_frequency = 128

#innodb
innodb_autoextend_increment = 64
innodb_concurrency_tickets = 5000
innodb_old_blocks_time = 1000
innodb_purge_batch_size = 300
innodb_stats_on_metadata = off
innodb_thread_sleep_delay = 10000 
innodb_adaptive_max_sleep_delay = 15000 
innodb_buffer_pool_dump_at_shutdown = on
innodb_buffer_pool_load_at_startup = on
innodb_flush_neighbors = 1
############################nnoDB使用后台线程处理数据页上写 I/O(输入)请求的数量。
innodb_write_io_threads = 8 
############################InnoDB使用后台线程处理数据页上读 I/O(输出)请求的数量。这里输出是输入的两倍。
innodb_read_io_threads = 16
innodb_print_all_deadlocks = on
innodb_buffer_pool_size = 1G
innodb_buffer_pool_instances = 8 
innodb_data_file_path = ibdata1:100M:autoextend # 这个参数在windows版本上没有这个参数
innodb_thread_concurrency = 48 
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 64M
############################该值表示每个redo log文件大小,该值大小约为该mysql实例一个小时产生的日志大小,这里设置为4G,ib_logfile0和ib_logfile1文件都是4G,逻辑上ib_logfile被当成了一个文件。循环写入。
innodb_log_file_size = 4096M 
#############################配置redo log成多个文件,Redo log文件以ib_logfile[number]命名,日志目录通过参数innodb_log_group_home_dir控制,以顺序的方式写入文件文件,写满时则回溯到第一个文件,进行覆盖写。
innodb_log_files_in_group = 3 
###############################控制了 Dirty Page 在 Buffer Pool 中所占的比率。
innodb_max_dirty_pages_pct = 75 
innodb_max_dirty_pages_pct_lwm = 10 
innodb_flush_method = O_DIRECT   # 在windows上不行
innodb_lock_wait_timeout = 10 
#注意:innodb_file_per_table参数必须设置为1,否则xtrabackup工具无法单独备份某一个数据库。
innodb_file_per_table = 1
innodb_purge_threads = 4 
#########################该参数表示缓冲区刷新到磁盘时,刷新脏页数量。普通单个SATA可以设置200,对于SSD可以设置3000到5000,而拥有5个磁盘组成的RAID5可以设置成2000。
innodb_io_capacity = 5000
innodb_open_files = 65535 
innodb_online_alter_log_max_size = 5120M
innodb_sort_buffer_size = 4M
innodb_adaptive_hash_index_parts = 8 
innodb_buffer_pool_chunk_size = 128 
innodb_buffer_pool_dump_pct = 80 
innodb_deadlock_detect = on 
innodb_default_row_format = DYNAMIC 
innodb_fill_factor = 100 
innodb_flush_sync = off 
innodb_log_checksums = on 
innodb_log_write_ahead_size = 8192 
innodb_max_undo_log_size = 1073741824 
innodb_page_cleaners = 4 
innodb_purge_rseg_truncate_frequency = 128 
innodb_temp_data_file_path = ibtmp1:12M:autoextend 

 

 

 

MySQL 8 是 MySQL 数据库的一个重大版本更新,于2018年4月发布,它引入了许多新的功能和改进,这些功能主要包括以下几个方面:

  1. Window Functions:MySQL 8 引入了窗口函数,可以对查询结果集中的一组行执行计算并返回单个结果,这极大地增强了查询数据的能力。窗口函数可以被用于统计、排序、分组等功能,可以支持大量的函数库。

  2. Common Table Expressions (CTEs):CTEs 允许在查询中定义临时结果集,这个结果集可以在后续查询中被引用。这样的好处是可以将复杂的查询分解成多个简单的查询,使得查询更加清晰易读。

  3. JSON Enhancements:MySQL 8 引入了 JSON 数据类型,同时也增强了对 JSON 的支持,包括新增了 JSON_VALID 和 JSON_TABLE 函数。JSON 数据类型也可以被用于索引和搜索。

  4. Invisible Indexes:这个特性允许用户将索引从数据库中隐藏,但仍然可以被使用。这个特性可以用于优化查询计划,以及简化索引维护。

  5. 增强的安全性:MySQL 8 引入了很多新的安全特性,包括支持使用证书进行身份验证、密码加密和密码策略等。此外,MySQL 8 还引入了新的系统变量来增强安全性。

  6. 改进的性能:MySQL 8 引入了很多新的特性来提高性能,包括增强的查询优化器、缓存策略、索引算法和并发控制等。

  7. 自适应哈希索引:这个特性允许 MySQL 在需要的时候自动创建和删除哈希索引。哈希

 

 

MySQL 8.0是一款功能强大的关系型数据库管理系统,提供了许多新的特性和改进,下面是其中一些最重要的新特性:

  1. 改进的JSON支持:MySQL 8.0提供了对JSON数据类型的更好支持。新的JSON函数和运算符可用于查询和操作JSON文档。

  2. 改进的性能:MySQL 8.0针对大型数据集的查询性能进行了优化,特别是在多核系统上的查询执行效率更高。

  3. 更好的安全性:MySQL 8.0引入了更多的安全功能,例如支持加密数据传输和存储,支持更安全的密码验证方法等。

  4. Window函数支持:MySQL 8.0引入了窗口函数支持,使得在SQL查询中可以方便地进行各种聚合和分析操作。

  5. 改进的地理空间支持:MySQL 8.0提供了更好的地理空间支持,包括新的地理空间函数和类型,以及对GeoJSON格式的支持。

  6. 改进的分析查询功能:MySQL 8.0引入了更多的分析查询功能,例如递归查询、CTE(Common Table Expression)和LATERAL JOIN。

  7. 改进的可扩展性:MySQL 8.0提供了更好的可扩展性和集群功能,包括支持更多的数据节点和更好的分布式查询优化。

  8. 新的管理工具:MySQL 8.0提供了新的管理工具,例如MySQL Shell和MySQL Router,以提高可管理性和可用性。

  9. 改进的复制功能:MySQL 8.0引入了更多的复制功能

 

 

 

 

 

 

################################

posted @ 2023-02-05 22:03  igoodful  阅读(691)  评论(0编辑  收藏  举报