# MySQL安装配置

SuccBI支持MySQL数据库,可以将MySQL当作默认数据库、事务性数据库或分析库使用。

# 版本

MySQL8支持了window函数,更有利于分析数据,也有更好的性能,我们推荐使用8.0.16及以上版本。

# 安装MySQL

可以点击这里 (opens new window)进入到官网下载,并查看安装步骤。

# URL配置

jdbc连接URL推荐配置:

jdbc:mysql://127.0.0.1/succbidw?useUnicode=true&characterEncoding=utf8&allowLoadLocalInfile=true&zeroDateTimeBehavior=convertToNull&useSSL=false

# 配置初始化文件

MySQL会按照一定顺序查找配置文件,并读取所有存在的文件。如果该文件不存在,则需要手动创建。有需要可以了解:MySQL8.0参考手册 (opens new window)

配置文件my.ini的推荐配置如下:

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

[mysqld]
# 设置3306端口
port=3306

# 设置允许客户端执行load data装载数据,否则会出现ERROR 1148: The used command is not allowed with this MySQL version异常。
# https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html
# 除了服务器端设置设置此参数,还需在url设置allowLoadLocalInfile=true参数。
loose-local-infile=1

# mysql中使用group_concat时,经常遇到报错:Row 25 was cut by GROUP_CONCAT()。
# 原因是MySQL中的参数group_concat_max_len 限制了其返回的最大字符长度,默认为1024,超过后就会报错,此处改大点
group_concat_max_len = 102400

# 设置时区
# 不加这个jdbc连接有异常。
# The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. 
# You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
default-time_zone='+8:00'

# mysql推荐的是utf8mb4,不是utf8, https://www.techug.com/post/in-mysql-never-use-utf8-use-utf8mb4.html
# 可通过sql:SELECT default_character_set_name,schema_name FROM information_schema.SCHEMATA; 查看各个database的默认字符集
character-set-server=utf8mb4

#设置默认数据库引擎为Innodb, 5.5.5开始就是默认引擎。
default-storage-engine=INNODB

#避免出现异常 Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
#see https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_page_size
innodb_page_size=32KB

#InnoDB用于缓存数据、索引、锁、插入缓冲、数据字典等
#如果是专用的DB服务器,且以InnoDB引擎为主的场景,通常可设置物理内存的50%
#如果是非专用DB服务器,可以先尝试设置成内存的1/4,如果有问题再调整
#默认值是8M,非常坑X,这也是导致很多人觉得InnoDB不如MyISAM好用的缘故
innodb_buffer_pool_size = 512M

#InnoDB共享表空间初始化大小,默认是 10MB,也非常坑,改成 256M,并且自动扩展
innodb_data_file_path = ibdata1:256M:autoextend

#如果不了解本选项,建议设置为1,能较好保护数据可靠性,对性能有一定影响,但可控
#提高性能可设置为2
innodb_flush_log_at_trx_commit = 1

#InnoDB的log buffer,通常设置为 64MB 就足够了
innodb_log_buffer_size = 64M

#InnoDB redo log大小,通常设置256MB 就足够了
innodb_log_file_size = 256M

#InnoDB redo log文件组,通常设置为 2 就足够了
innodb_log_files_in_group = 2

#启用InnoDB的独立表空间模式,便于管理,性能会高一些,且删表后可自动回收表空间
innodb_file_per_table = 1

#启用InnoDB的status file,便于管理员查看以及监控等
innodb_status_file = 1

#设置事务隔离级别为 READ-COMMITED,提高事务效率,通常都满足事务一致性要求
transaction_isolation = READ-COMMITTED

#在这里,其他配置选项也需要注意:
#设置最大并发连接数,如果前端程序是PHP,可适当加大,但不可过大
#如果前端程序采用连接池,可适当调小,避免连接数过大
max_connections = 100

# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100

#设置临时表最大值,这是每次连接都会分配,不宜设置过大 max_heap_table_size 和 tmp_table_size 要设置一样大
max_heap_table_size = 96M
tmp_table_size = 96M

#每个连接都会分配的一些排序、连接等缓冲,一般设置为 2MB 就足够了
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M

#建议关闭query cache,有些时候对性能反而是一种损害
#mysql8已经去掉了query cache,详见:https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html
#query_cache_size = 0

#如果是以InnoDB引擎为主的DB,专用于MyISAM引擎的 key_buffer_size 可以设置较小,8MB 已足够
#如果是以MyISAM引擎为主,可设置较大,但不能超过4G
#在这里,强烈建议不使用MyISAM引擎,默认都是用InnoDB引擎
key_buffer_size = 8M

#设置连接超时阀值,如果前端程序采用短连接,建议缩短这2个值
#如果前端程序采用长连接,可直接注释掉这两个选项,是用默认配置(8小时)
#interactive_timeout = 120
#wait_timeout = 120

# 设置以字节发送给服务器的最大数据包大小. (默认: 1MB)
max_allowed_packet = 16M

# mysql8,默认使用caching_sha2_password认证,可以修改为传统的“mysql_native_password”插件认证,用于连接Navicat
default_authentication_plugin=mysql_native_password

# 表名不区分大小写
lower_case_table_names = 1

# mysql8升级到8.0.16后,win版本也出现此问题
# (year(date1)-year(date2))*12+(month(date1)-month(date2)) 返回负数时出异常:
# BIGINT UNSIGNED value is out of range ...
# 原因:year返回UNSIGNED integer,当出现负数,就会出这个异常,5.5以上版本会有这个问题。
# 详见:https://dev.mysql.com/doc/refman/5.5/en/out-of-range-and-overflow.html
#      https://dev.mysql.com/doc/refman/5.5/en/sql-mode.html#sqlmode_no_unsigned_subtraction
# 解决办法:配置sql_mode='NO_UNSIGNED_SUBTRACTION'
sql_mode = 'NO_UNSIGNED_SUBTRACTION'

配置文件中的路径要和实际存放的路径一致

是否有帮助?
0条评论
评论