Mysql 其他

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)自带导出

mysqldumpbin目录下自带的导出程序,其速度一般别用户界面程序要快,而且导出文件内容一般更小,导出语法如下:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容