sql_mode
其规定了数据库存储宽松度
(1)类别
①ANSI
宽松模式,比如数据类型设置为char(5),当存储字符长度超过5时字符可以存储,但只能存前5个字符,并会发出警告
② STRICT_TRANS_TABLES
严格模式,比如还是char(5),字符长度超过5时会报错,并且不会存储
③ TRADITIONAL
对所有事务、非事务存储引擎检查
(2)查看
可输入以下命令查看当前sql_mode:
mysql> show variables like 'sql_mode';
(3)设置
可输入以下命令设置sql_mode:
set sql_mode='模式'
导出数据库
(1)界面程序导出
直接在用户界面程序中点击导出.sql
文件即可
(2)自带导出
mysqldump
是bin
目录下自带的导出程序,其速度一般别用户界面程序要快,而且导出文件内容一般更小,导出语法如下:
mysqldump -u用户名 -p密码 数据库名 表名(如果是导出表) >导出文件名.sql
举例:
...\Desktop>mysqldump -uroot -pxxxxxx shop >aaa.sql
#导出数据库的所有表
...\Desktop>mysqldump -uroot -pxxxxxx shop peoples >bbb.sql
#导出数据库下某个表
(3)更高性能导出
使用xtrabackup
备份,性能更高,特别是数据量特别大的时候
导入数据库
(1)界面程序导入
直接在用户界面程序中点击运行.sql
文件即可
(2)自带导入
自带导入使用bin
下的mysql就行了,也是效率更高,导入语法如下:
mysql -u用户名 -p密码 数据库名 < 导入文件名.sql
举例:
...\Desktop>mysql -uroot -pxxxxxx test < aaa.sql
#需要有一个数据库,然后导入表
如果在登录状态下,导入语法如下:
mysql> use aac
#进入某个数据库
mysql> source aaa.sql
#在该数据库下运行.sql文件导入表
注:即使导出了一个数据库,导出的文件里也只是写了数据库里所有表的信息,所以导入时还是需要选择一个数据库,然后把文件里的表全部导入
变量修改
通过命令:show variables
,可以查看所有的variables
的值,但这些值在命令行里用set
命令的话只能做临时的修改,当重启mysql服务后,又会恢复默认值。所以如果要永久修改,则需要在my.ini
配置文件下进行修改,修改方式为:
variables变量名=值
比如要修改query_cache_size
的值(配置文件中没有),就加一行:
query_cache_size=数值大小
然后重启mysql服务,即可完成配置
服务器配置选项
最大mysql连接数 max_connections
最大打开多少张表缓存 table_open_cache
索引缓存大小 key_buffer_size
innodb引擎缓存池大小 innodb_buffer_pool_size
innodb独立表文件 innodb_file_per_table
配置选项可以通过下面命令查看:
show variables like 'xxx';
问题解决
数据库安装配置问题
允许远程连接
参考:https://blog.csdn.net/weixin_38112977/article/details/79725135
密码登录失败,显示不安全
主要是密码为原始密码,没有进行加密
步骤参考:https://blog.csdn.net/java_big_hero/article/details/78896663
数据库报错问题
[mysql]ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
https://blog.csdn.net/u012377333/article/details/50290827
连接空闲8小时自动断开问题
在mysql中有两个参数来控制连接允许的最长空闲时长,分别是interactive_timeout
(交互式)和wait_timeout
(非交互式),可以通过下面命令进行查看:
show variables like '%timeout%';
一般默认值都是28800(8h),所以在使用连接池时,如果长时间不用,就可能造成连接断开的情况,进而导致web中数据库操作异常,可以通过下面命令修改最长空闲时长:
set global interactive_timeout=288000;
// 将空闲时长变成80h
set global wait_timeout=288000;
表设计问题
一个字段由多个值组成,用逗号隔开,如何判断是否在里面
SELECT
*
FROM
表名
WHERE
FIND_IN_SET(151, 字段名);
参考:https://blog.csdn.net/wencong940/article/details/81253296