ITPub博客

首页 > 数据库 > MySQL > mysql随记

mysql随记

原创 MySQL 作者:ironcat 时间:2018-07-17 15:39:29 0 删除 编辑

一、企业版和社区版区别:审计 实时监控 线程池 备份
二、物理结构:程序 数据 日志
frm表结构 idb表数据文件 slow——###.log记录超过10秒的操作
后台进程:单进程,多线程
mysqld_safe: 是守护进程
ps -ef | grep mysqld
show processlist;
高可用及灾备:
主备同步:异步和半同步。
binlog relaylog dump线程 io线程 sql线程
异步:写binlog后 engin提交,dump线程-io线程-relaylog-sql线程
半同步:写binlog后,dump线程-io线程-relaylog- engin提交-sql线程
三基本操作
下载安装 链接数据库 对象管理 数据管理 问题管理
http://spms
连接数据库: mysql -uroot -p;mysql -uroot -ptoor ; mysql mysql -uroot -ptoor -e"select 1"; mysql -uroot -ptoor < script.sql
一个database就是一个文件夹
create database test;
drop database test;
show create database test;查看ddl
use test  指定数据库
show create table t1 \G

create user manager identified by 'manager'
grant all on hr.* to manager;
grant file on *.* to manager;-- 这里要是 *.*
show grants for manager;
mysqldump -umanager -pmanager --set-gtid-purged=OFF hr>hr.sql

开发指引
架构规划 系统设计 程序开发 oracle vs mysql 性能测试 版本发布 开发规范
普通架构 异步备份+数据补偿 分布式访问中间件(试点优化中)
架构规划考虑高可用和设备选型
系统设计:字符集 用户 库表
字符集: utf8mb4 支持4字节,完整覆盖unicode标准。字节数据的解释的符号集合。 实例 database table column的不同字符集的优先级
用户:database=schema 不同与oralce 用户=schema : grant all on db1.* to user1;mysql可以按不同服务器登录建立不同用户,赋予不同权限。‘user1’@‘ip’
库表:不区分大小写的问题: collate=utf8-general_ci(建表时指定这句,排序不区分大小写)XX_ci 字符排序  XXX_bin二进制排序
如果建库和建表时指定字符集,而不指定排序规则,默认是ci结尾不区分大小写。
或者需要明确指定字符集和排序规则,需要先写字符集,后写排序规则。所以建库建表定义字段信息时,不需要指定字符集和排序规则。不要在建表时指定engine参数,默认innodb
主键:备库比主库晚几天,解析relaylog。备库relay重放时时拆分delete和update的,主库delete n条数据,备库被解析为n条delete语句。主要原因是表没有定义主键。
id big_int unsigned auto_increment:定义自增列够用5亿年。
mysql表一般是索引组织表,一般需要有自增列。全表truncate或删除大量操作,不应使用自增列。truncate后自增列从1开始,delete后自增列从曾经的最大值+1开始,但是重启后,就从当前表最大值+1开始。也即truncate和重启后自增列从列最大值开始。
分区:元数据锁竞争,500万以上数据要分区。对分区表查询也会加全表的表级锁。truncate分区也会对全表加表级锁。
解决:lock_wait_timeout参数。
truncate分区,其他分区的增删改查会阻塞。
自增列作为主键第一列,然后包含分区列。
mysql的字符串比较时,去掉空格后比较,不影响存储。char存取时的数据自动去掉末尾的空格,varchar原封不动取出
int(n) n不是限制长度,decimal(n,0)才限制位数。
索引:建主键后不再见索引,复合索引与顺序有关。
mysql -hIP -P端口 -u用户 -p密码 --default-character-set=服务端字符集 database名称
登录后执行脚本 source scripts.sql
运行带中文的脚本使用 sql脚本重定向。
jdbc统一使用mysql-connector-java-5.140.tar.gz
jdbc:mysql://ip:3306/dbname?SSL=false
最大连接数;max_connections参数
tx_isolation参数read_committed即使dml语句是全表扫描,只会锁定被更新的记录。
repeatable_read会全表扫的dml语句会锁定全表。
mysql workbench默认repeatable_read,不建议使用其进行非查询操作。
wait_timeout:mysql客户端的数据库链接闲置最大时间(秒)行内设置1小时,如果长链接的空闲时间超过该参数,数据库链接会被mysql主动断开。需要长链接有心跳机制。
replace into语句会锁住当前行,也会锁住下一行。replace锁的范围大,会锁唯一索引对应的下一条记录。
mysql的char(n) varchar(n)代表字符数而不是字节
mysql默认执行sql就commit了,默认autocommit。如果关闭:set autocommit=0;select * from test;会有元数据锁。
事务控制: start transaction commit;
mysql null=‘’ 使用concat拼接字符串
mysql减少多表连接和嵌套,分析函数等复杂运算


useCursorFetch useServerPrepStmts 其中一个为true,sql不会记录在sys.statment_analysis表,故无法进行性能分析。








来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/119872/viewspace-2157986/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 索引学习笔记
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2013-10-24

  • 博文量
    3
  • 访问量
    3132