zoukankan      html  css  js  c++  java
  • mysql高级

    1.1、启动MySQL服务器
    service MySQL start#启动服务器
    service mysql stop #关闭服务器

    1.2、登录mysql
    mysql -u root -p #登录root用户 然后输入密码,
    cat /root/.mysql_secret#查看随机生成的密码
    进入mysql后输入:set password =password("新密码")#设置新的密码
    设置远程访问:grant all privileges on *.* to 'root' @'%' identified by 'itcast'
    关闭防火墙:service iptables stop

    2.1索引结构
    BTREE索引:最常见索引类型,大部分索引都支持B树索引
    HASH索引:只有memory引擎支持,使用场景简单
    R-tree索引:主要用于地理空间数据类型
    Full-text(全文索引):主要用于全文

    2.2索引分类
    单值索引:即一个索引只包含单个列,一个表可以有多个单列索引
    唯一索引:索引列的值必须唯一,但允许有空值
    复合索引:即一个索引包含多个列

    2.3 索引语法
    创建索引:
    create index 索引名称 on 表名(某列);
    查看索引:
    show index from 表名;
    删除索引:
    drop index 索引名称 on表名;
    alter命令;
    alter table 表名 add unique 索引名称(某列);#创建唯一索引

    3.1创建或者修改视图
    create view 视图名称 as(select语句);#创建视图
    select * from视图名称;#查看视图

    3.2查看视图和删除视图
    show tables就可以查看表和视图
    drop view if exists 视图名称;

    4.1创建存储过程
    首先要修改结束语句的符号:delimiter $ #将;换成了$符号
    create procedure 存储过程名称()
    begin
    sql语句;
    end $

    4.2调用存储过程
    call 存储过程名称();

    4.3查询存储过程
    select name from mysql.proc where db='demo_01';#通过表来查询
    show procedure statusG;查看存储过程状态信息
    show create procedure test.存储过程名称G;

    4.4 删除存储过程
    drop procedure 存储过程名称

    4.5.1 存储过程语法-变量
    delimiter $
    create procedure 存储过程名称()
    begin
    declare num int default 10;#declare声明变量,default设置默认值
    set num =num +10#set 可以赋值给常量
    select count(*) into num from city;#select into #可以对变量进行赋值,
    select concat('num值:',num);
    end $

    4.5.2 存储过程语法-if条件判断
    delimiter $
    create procedure 存储过程名称()
    begin
    declare num int default 10;
    declare content varchar(50) default ' ';
    if num>= 10 then
    set content='大于10';
    end if;
    select concat('num值:',num,'大小为',content);
    end $

    4.5.3 存储过程语法-传递参数
    1、输入参数:
    delimiter $
    create procedure 存储过程名称(in number int)#in表示输入参数
    begin
    declare num int default 10;
    declare content varchar(50) default ' ';
    if num>= 10 then
    set content='大于10';
    end if;
    select concat('num值:',num,'大小为',content);
    end $
    调用时 :call 存储过程名称(num)
    2、输出参数:
    delimiter $
    create procedure 存储过程名称(in number int,out content varchar(50))#in表示输入参数
    begin
    if num>= 10 then
    set content='大于10';
    end if;
    end $
    调用时:call 存储过程名称(num,@content)$#将返回结果存到了@content中
    查看select @content$

    4.5.4 存储过程语法-case结构
    delimiter $
    create procedure 存储过程名称(mon int)
    begin
    declare result varchar(10);
    case
    when mon >=1 and mon<=4 then
    set result = '第一季度';
    when mon >=5 and mon<=8 then
    set result = '第二季度';
    else
    set result = 'null';
    end case;
    end $

    4.5.4 存储过程语法-while循环
    delimiter $
    create procedure 存储过程名称(num int)
    begin
    declare total int default 0;
    declare number int default 1;
    while numer <=num do;#满足条件执行语句
    set total =total+number;
    set number=number +1;
    end while;
    end $

    4.5.5 存储过程语法-repeat结构
    delimiter $
    create procedure 存储过程名称(num int)
    begin
    declare total int default 0;
    repeat
    set total =total+num;
    set num=num -1;
    until num=0;#until 设置条件,repeat 满足条件者退出循环
    end repeat ;
    end $

    4.5.6 存储过程语法-loop语句
    delimiter $
    create procedure 存储过程名称(num int)
    begin
    declare total int default 0;
    c:loop #c:为取得别名
    set total =total+num;
    set num=num -1;
    if num<=0 then
    leave c;
    end loop c ;
    end $

    4.5.7 存储过程语法-游标
    delimiter $
    create procedure 存储过程名称()
    begin
    declare id int(11);
    declare name varcher(50);
    declare has_data int default 1;
    declare 游标名字 sursor for select * from 表名;#创建游标
    declare exit handler for not found set has_data=0#当游标拿不到数据时会触发,必须在创建游标下一行
    open 游标名字;#打开游标
    repeat
    fetch 游标名字 into id ,name;
    select concat ('id=',id,'name=','name')
    end repeat;
    close 游标名字;#关闭游标
    end $

    4.6 存储函数
    delimiter $
    create procedure 存储过程名称(num int)
    returns int
    begin
    declare cnum int(11);
    select count(*) into id from 表名 where id = num;
    return cnum;
    end $
    调用:select 存储过程名称(num)

    5.1创建触发器
    插入(insert)、修改 (update)、删除(delete)
    delimiter $
    create trigger 触发器名称
    after insert#插入
    on 表名1
    for each row#表示行级触发器
    begin
    insert into 表名2(列名1,列名2) values()
    end $

    5.2查看触发器
    show triggerG;#查看全部触发器

    5.3删除触发器
    drop trigger 触发器名字;

    6.1查看存储引擎
    进入数据库中后:show engines;#查看数据库支持的存储引擎

    7.1定位低效sql语句
    可有使用:show processlist;查看

    7.2 explain分析执行计划
    explain select * from 表名 where 查询条件;#使用explain查看

    7.2.1 explain之id
    id字段时select查询的序号,是一组数字,表示查询中执行select子句或者是操作表的顺序
    id相同表示加载表的顺序从上到下
    id不同id值越大,优先级越高,越先执行
    id有相同也有不同,同时存在。id相同的认为是一组,从上往下顺序执行;id的值越大,优先级越高,越先执行

    7.2.2 explain之select_type
    表示select的类型:
    simple:简单的select查询,查询中不包含子查询或者umion
    primary:查询中若包含任何复杂的子查询,最外层查询标记为该标识
    subquery:在select或where列表中包含了子查询
    derived:在from列表中包含的子查询,被标记为derived mysql会递归执行这些子查询,把结果放在临时表中
    union:若第二select出现在union之后,则标记union;若union包含from子句的子查询中,外层select将被标记为:derived
    union result:从union表获取结果select


    7.2.3 explain之table
    展示这一行数据是关于哪张表的

    7.2.4 explain之type
    type显示是访问类型,是交为重要的一个指标,可取值为:
    null:mysql不访问任何表,索引,直接返回
    system:表示只有一行记录,这是const类型的特例,一般不会出现
    const:表示通过索引一次就找到了,const用于比较primary key 或者unique索引。
    因为只匹配一行数据,所以很快,如果将主键置于where列表中,mysql就将该查询转换为一个常量
    const于将主键或唯一索引的所有部分与常量值进行比较
    eq_ref:类似ref,区别在使用的是唯一索引,使用主键的关联查询,关联查询的记录只有一条
    ref:非唯一索引查询扫描,返回匹配某个单独值的所有行。
    range:只检索给定返回的行,使用一个索引来选择行。
    index:index与all的区别为index类型只是遍历了索引树,通常比all快,all是遍历数据文件
    all:将遍历全表找到匹配的行

    7.2.5 explain之key
    possible_keys:显示可能应用在这张表的索引,一个或多个
    key:实际使用的索引,如果为null ,则没有使用索引
    key_len:表示索引中使用的直接数,该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下,长度越短越好

    7.2.6 explain之rows
    扫描的数量。

    7.2.7 explain之extra
    using filesort:说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引进行读取,称为文明排序
    using temporary:使用了临时表保存中间结果,mysql在对查询结果排序使用临时表。
    using index:表示相应的select操作使用了覆盖索引,避免访问表的数据行,效率不错,

    7.3 show profile分析sql
    select @@have_profiling#查看是否支持profiling
    select @@profiling#查看profiling是否开启
    set profiling=1#开启profiling
    在操作完一系列指令后使用:show profiling;查看所有指令的操作时间
    show profile (CPU) for query 5;#查看第五条指令操作每一个阶段所用的时间,加上CPU可以查看cup耗损时间

    7.4 trace分析优化器执行计划
    通过trace文件能够进一步了解优化器选择A计划,而不是选择B计划
    set optimizer_trace="enabled=on",end_markers_in_json=on;#开启优化器
    set optimizer_trace_max_mem_size=1000000;#设置内存
    运行sql语句
    select * from information_schema.optimizer_traceG;#查看

    8.1避免索引失效
    1、全值匹配:对索引中所以列都指定具体值
    2、最左前缀法则:指查询从索引的最左前列开始,并且不跳过索引中的列
    3、范围查询右边的列,不能使用索引
    4、不要在索引列上进行运算操作,造成索引失效
    5、字符串不加单引号,造成索引失效
    6、尽量使用覆盖索引,避免select *
    7、用or分割的条件 如果or前条件中的列有索引,而后面的列没有索引,那么涉及的索引都不会被用到
    8、以%开头的立刻模糊查询,索引失效
    9、如果mysql评估使用索引比全表更忙,则不使用索引
    10、is null、is not null 有时索引失效
    11、in走索引,not in索引失效
    12、单列索引和复合索引,尽量使用复合索引而少使用单列索引

    8.2查看索引使用情况
    show status like‘handler_read%’;

    9.1 sql优化-大量插入数据
    使用load命令导入数据的时候,适当的设置可以提高导入的效率
    1、顺序插入
    2、关闭唯一性校验,在导入数据前执行set unique_checks=0,导入后执行set unique_checks=1恢复唯一性校验
    3、手动提交事务,在导入数据前执行set autocommit=0,导入后执行set autocommit=1恢复手动提交事务

    9.2 优化insert语句
    insert into 表名 values(1,"##");
    insert into 表名 values(2,"##");
    方法一:
    insert into 表名 values(1,"##"),(2,"##");
    方法二 在事务进行数据插入:
    start transaction;
    insert into 表名 values(1,"##");
    insert into 表名 values(2,"##");
    commit
    方法三 数据有序插入

    9.3 优化order by语句
    1、通过对返回数据进行排序,也就是通常说的filesort排序,所有不是通过索引直接返回排序结果的排序叫做filesort排序
    2、通过有序索引顺序扫描直接返回有序数据,这种情况即为using index 不需要额外排序,操作效率高

    9.4 优化group by 语句
    可以使用索引提高效率
    select age,count(*) from 表名 group by age order by null;#后面讲不需要的查询语句关闭

    9.5 优化嵌套查询
    用多表连接(join)查询代替子查询可更高效

    9.6 优化or条件
    对于包含or的查询子句,如果要利用索引则or之间条件都必须用到索引,而且不能使用复合索引
    可有使用union代替or来提高效率,

    9.7 优化分页查询
    优化方法一:在索引上完成排序分页操作,最后根据主键关联回原表查询所需要的其他列内容
    select id from 表名 order by id limt 2000,10;#查询从2000开始的后10位的内容
    优化方法二:该方案使用于主键自增长的表,可以把limit查询转换成某个位置的查询

    9.8 使用sql提示
    sql提示,是优化数据库的一个重要的手段,简单来说,就是在sql语句中加入一些人为的提示来达到优化的效果
    1)、use index:在查询语句表名的后面。添加use index来提供希望mysql去参考的索引列表
    select * from 表名 use index (索引名)where 查询条件;
    2)、ignore index 如果用户单纯的想让mysql忽略一个或多个索引,则可以使用ignore index
    select * from 表名 ignore index (索引名)where 查询条件;
    3)、force index:为强制mysql使用一个特点的索引,可以查询中使用force index作为hint
    select * from 表名 force index (索引名)where 查询条件;


    10.1 应用优化-使用连接池
    对于访问的数据库来说,建立连接的代价比较昂贵的,因为我们频繁的创建关闭连接,是比较消耗资源的,我们有必须要建立数据库
    连接池,以提高访问的性能

    10.2 减少对mysql的访问
    1)、避免对数据进行重复检索:在编写应用代码时,需要能够理清对数据的访问逻辑。能够一次连接就获取结果
    2)、增加ceche层:在应用中,我们可以在应用中增加缓存层来达到减轻数据库负担的目的。
    3)、负载均衡:它的机制就是利用某种均衡算法,将固定的负载量分布到不同的服务器上,以此来降低单台服务器的负载,达到优化的效果

    11.1 mysql中查询缓存优化
    开启mysql的查询缓存,当执行完全相同的sql语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效
    修改比较频繁的表不适合做查询缓存。

    11.2 查询缓存的配置
    1)、查看当前的mysql数据库是否支持查询缓存:
    show variables like 'have_query';
    2)、查看当前mysql是否开启了查询缓存:
    show variables like 'query_cache_type';
    3)、查看查询缓存的占用大小;
    show variables like 'query_cache_size';
    4)、查看查询缓存的状态变量;
    show variables like 'Qcache%'

    11.3 开启查询缓存
    linux中打开my.cnf 文件:vi /usr/my.cnf
    在最后一行添加:query_cache_type = 1
    然后重启mysql:service mysql restart

    11.4 查询缓存select选项
    sql_cache:如果查询结果是可缓存的,并且query_cache_type系统变量的值为no或者demand,则缓存查询结果
    sql_no_cache:服务器不使用查询缓存,它既不检查查询缓存,也不检查结果是否已缓存,也不缓存查询结果

    11.4 查询缓存失效的情况
    1)、sql语句不一致的情况,想要命中查询缓存,查询sql语句必须一致。
    2)、当查询语句中有一些不确定的时,则不会缓存。如:now(),current_date(),curdate()
    3)、不使用任何表查询语句。
    4)、查询mysql,information_schema或者performance_schema数据库中的表时,不会走查询缓存
    5)、在存储的函数,触发器或事件的主体内执行的查询。
    6)、如果表更改,着该表的所有高速缓存查询都将变为无效并从高速缓存中删除。

    12.1 内存优化的原则
    1)、将尽量多的内存分配给mysql做缓存,但要给操作系统和其他程序预留足够的内存
    2)、myisam存储引擎的数据文件读取依赖于操作系统自身的io缓存
    3)、排序区、连接区等缓存是分配给每个数据库专用的。

    12.2 myisam内存优化
    key_buffer_size决定myisam索引块缓存区的大小,直接影响到myisam表的存取效率
    在/usr/my.cnf中添加:key_buffer_size=512M
    read_buffer_size:如果需要经常顺序扫描myisam表,可以增大read_buffer_size的值来改善性能
    read_rnd_buffer_size:对于需要做排序的myisam表的查询,如果有order by子句的sql,适当增加read_rnd_buffer_size的值

    12.3 innoDB内存优化
    innoDB用一块内存区做io缓存池,该缓存池不仅用来缓存innoDB的索引块,而且也用来缓存innoDB的数据块
    innodb_buffer_pool_size:该变量决定了innoDB存储引擎表数据和索引数据的最大缓存区大小,innodb_buffer_pool_size的值越大,缓存命中率越高,
    在/usr/my.cnf中添加设置:innodb_buffer_pool_size=512M
    innodb_log_buffer_size:决定了innodb重做日志缓存的大小,
    在/usr/my.cnf中添加设置:innodb_log_buffer_size=10M

    13.1 mysql并发参数调整
    max_connections:
    采用max_connections控制允许连接到mysql数据库的最大值,默认值位151,可以根据系统的性能来调整最大连接数。
    back_log:
    back_log参数控制mysql监听TCP端口时设置的积压请求栈大小,如果mysql的连接数达到max_connections时,新的请求将会被存在堆栈中,以等待某一连接
    释放资源。如果需要数据库在较短时间内处理大量连接请求,可以考虑将back_log的值增大。
    table_open_cache:
    该参数用于控制所有sql语句执行线程可打开表缓存的数量,而在执行sql语句时,每一个sql执行线程至少要打开一个表缓存。该参数的值应该根据设置最大连接
    数来设定
    thread_cache_size:
    为了加快连接数据库的速度,mysql会缓存一定数量的客户服务线程以备重用,通过参数thread_cache_size可控制mysql缓存客户服务线程的数量
    innodb_lock_wait_timeout:
    该参数是用来设置innodb事务等待行锁的时间,默认值是50ms,可以根据需要的进行动态设置
    查看上述参数:show variable like '##'

    14.1 mysql 锁的问题
    锁是计算机协调多个进程或线程并发访问某一资源的机制。(避免资源的争抢)
    从数据操作的粒度分为表锁和行锁
    表锁:操作时,会锁定整个表
    行锁:操作时,会锁定当前操作行
    从对数据操作的类型分为读锁和写锁
    读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响
    写锁(排它锁):当前操作没有完成之前,它会阻断其他写锁和读锁

    14.2 mysql锁
    表级锁:偏向myisam存储引擎,开销小,加锁块;不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低
    行级锁:偏向innodb存储引擎,开销大,加锁慢;会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度也最高
    页面锁:开销和加锁时间界于表锁和行锁之间,会出现死锁,锁定粒度界于表锁和行锁之间,并发一般

    14.3 myisam表锁
    myisam存储引擎只支持表锁,这也是mysql开始几个版本唯一支持的锁类型

    14.3.1 如何加表锁
    在执行语句时系统会自动添加写锁和读锁
    显示加表锁语法:
    加读锁:lock table 表名 read;
    加写锁:lock table 表名 write;
    对于myisam表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求
    对于myisam表的写操作,则会阻塞其他用户对同一表的读和写操作;

    14.3.2 查看锁的争用情况
    查看命令:show open tables;
    in_user:表当前被查询使用的次数。
    name_locked:表名称是否被锁定。
    查看表的锁定情况命令:show status like 'tale_locks%';
    tale_locks_immediate:指的是能够立即获得表级锁的次数
    tale_locks_waited:指的是不能立即获取表级锁而需要等待的次数,没等待一次,该值加1

    14.4 innodb行锁
    行锁特点:偏向innodb存储引擎,开销大,加锁慢;会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度也最高
    innodb于myisam的最大不同有两点:一是支持事务;二是采用了行级锁

    14.4.1innodb行锁模式
    要展示行锁模式先要关闭数据库的自动提交:set autocommit = 0
    再执行select语句

    14.4.2 无索引行锁升级为表锁
    查看当前表的索引:show index from test_innodb_lock

    14.4.3 间隙锁的危害
    当我们用范围条件,而不是使用条件检索数据,并请求共享或排他锁时,innodb会给复合条件的数据进行加锁。

    14.4.4 innodb行锁争用情况
    查看指令:show status like ' innodb_row_lock%'

    15.1 sql执行顺序
    编写顺序:
    select distinct
    from
    join
    where
    group by
    having
    order by
    limiy
    执行顺序:
    from
    not
    join
    where
    group by
    having
    select distinct
    order by
    limit

    15.2 正则表达式使用
    ^:在字符串开始处进行匹配
    $:在字符串末尾处进行匹配
    .:匹配任意单个字符,包括换行符
    [...]:匹配出括号内的任意字符
    [^...]:匹配不出括号内的任意字符
    a*:匹配零个或者多个a(包括空串)
    a+:匹配-一个或者多个a(不包括空串)
    a?:匹配零个或者一-个a
    a1|a2:匹配a1或a2
    a(m):匹配m个a
    a(m,):至少匹配m个a
    a(m,n) :匹配m个a到n个a
    a(,n):匹配0到n个a
    (...):将模式元素组成单一元素

    15.3 mysql常用的函数
    主要有四类函数:数字函数,字符串函数,日期函数和复合函数
    数字函数:
    ABS:求绝对值
    SQRT:求二次方根
    MOD:求余数
    CEIL和CEILING:两个函数功能相同,都是返回不小于参数的最小整数,即向上取整
    FLOOR:向下取整,返回值转化为- -个BIGINT
    RAND:生成-一个0~1之间的随机数,传入整数参数是,用来产生重复序列
    ROUND:对所传参数进行四舍五入
    SIGN:返回参数的符号
    POW和POWER:两个函数的功能相同,都是所传参数的次方的结果值
    SIN:求正弦值
    ASIN:求反正弦值,与函数SIN互为反函数
    COS:求余弦值
    ACOS:求反余弦值,与函数CoS互为反函数
    TAN:求正切值
    ATAN:求反正切值,与函数TAN互为反函数
    COT:求余切值
    字符串函数:
    LENGTH:计算字符串长度函数,返回字符串的字节长度
    CONCAT:
    合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一一个或多个
    INSERT:替换字符串函数
    LOWER:将字符串中的字母转换为小写
    UPPER:将字符串中的字母转换为大写
    LEFT:从左侧字截取符串,返回字符串左边的若干个字符
    RIGHT:从右侧字截取符串,返回字符串右边的若干个字符
    TRIM:删除字符串左右两侧的空格
    REPLACE):字符串替换函数,返回替换后的新字符串
    SUBSTRING:截取字符串,返回从指定位置开始的指定长度的字符换
    REVERSE:字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串
    日期函数:
    CURDATE和CURRENT, DATE:两个函数作用相同,返回当前系统的日期值
    CURTIME和CURRENT_TIME:两个函数作用相同,返回当前系统的时间值
    NOW和SYSDATE:两个函数作用相同,返回当前系统的日期和时间值
    MONTH:获取指定日期中的月份
    MONTHNAME:获取指定日期中的月份英文名称
    DAYNAME:获取指定日期对应的星期几的英文名称
    DAYOFWEEK:获取指定日期对应的一周的索引位置值
    WEEK:获取指定日期是一年中的第几周,返回值的范围是否为0~52或1~53
    DAYOFYEAR:获取指定日期是一年中的第几天 ,返回值范围是1 -366
    DAYOFMONTH:获取指定日期是一一个月中是第几天,返回值范围是1~31
    YEAR:获取年份,返回值范围是1970- 2069
    TIME_ TO SEC:将时间参数转换为秒数
    SEC. .TO. _TIME:将秒数转换为时间,与TIME. .TO. SEC互为反函数
    DATE_ ADD和ADDDATE:两个函数功能相同,都是向日期添加指定的时间间隔
    DATE. SUB和SUBDATE:两个函数功能相同,都是向日期减去指定的时间间隔
    复合函数:
    MAX:查询指定列的最大值
    MIN:查询指定列的最小值
    COUNT:统计查询结果的行数
    SUM !:求和,返回指定列的总和
    AVG:求平均值,返回指定列数据的平均值

    16.1 mysql中常用工具-mysql
    该mysql不是指mysql服务,而是指mysql的客户端工具
    1)、连接
    mysql -h 127.0.0.1-P3306 -u root -p
    -u:用户
    -p:密码
    -h:服务器IP
    -P:端口号
    2)、执行选项
    -e:执行sql语句并退出

    16.2 mysqlladmin
    mysqladmin是-个执行管理操作的客户端程序。可以用它来检查服务器的配和当前状态、创建并删除数据库等。
    可以通过: mysqladmin -help指令查看帮助文档
    mysqladmin -u root -p123123 create '数据库名称'

    16.3 mysqllbinlog
    由于服务器生成的二进制日志文件以二进制格式保存,所以如果想要检查这些文本的文本格式,就会使用到mysqlbinlog日志管理工具。
    -d:指定数据库名称,
    -o:忽略掉日志的前n行命令
    -r:将输出的文本格式日志输出到指定文件
    -s:显示简单格式,省略掉一下信息

    16.4 mysqldump
    mysqldump客户端工具用来备份数据库或在不同数据库之间进行数据迁移。备份内容包含创建表,及插入表的SQL语句。
    连接选项:
    -u:用户
    -p:密码
    -h:服务器IP
    -P:端口号
    输出选项:
    -- add- dr op- dat abase:在每个数据库创建语句前加上Drop database 语句
    --add-drop-table:在每个表创建语句前加上Drop table语句,默认开启;不开启(--skip- add- dr op-tab1e)
    -n,--no-create-db :不包含数据库的创建语句
    一t,--no-cr eate-info:不包含数据表的创建语句
    -d --no-data:不包含数据:
    -T,--t ab=name:自动生成两个文件: -个.sq1文件,创建表结构的语句;一个.txt文件,数据文件,相当于select into outfile

    16.5 mysqlimport/source
    mysqlimport是客户端数据导入工具,
    mysqlimport -uroot -p123123 text /tmp/book.txt
    然后导入sql文件:
    source sql文件位置

    16.6 mysqlshow
    mysqlshow客户端对象查找工具,用来很快地查找存在哪些数据库、数据库中的表、表中的列或者索引。
    - -count:显示数据库及表的统计信息(数据库,表均可以不指定)
    -i:显示指定数据库或者指定表的状态信息
    mysqlshow -uroot -p123123 --count

    17.1 mysql日志
    在任何一种数据库中,都会有各种各样的日志,记录着数据库工作的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件。MySQL 也
    不例外,在MySQL中,有4种不同的日志,分别是错误日志、= 进制日志( BINLOG日志)、查询日志和慢查询日志,这些日志记录着数据库在不同方面的踪迹。

    17.2 错误日志
    错误日志是MySQL中最重要的日志之- - ,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库
    出现任何故障导致无法正常使用时,可以首先查看此日志。
    该日志是默认开启的,默认存放目录为mysql的数据目录( var1/ib/mysql ) ,默认的日志文件名为hostname.err ( hostname是主机名)。
    查看日志命令:show variables like 'log_error%'
    查看日志内容:tail -f /var/lib/mysql/xaxh-sever.err

    17.3 二进制日志
    二进制日志( BINLOG )记录了所有的DDL (数据定义语言)语句和DML (数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的
    数据恢复起着极其重要的作用, MySQL的主从复制,就是通过该binlog实现的。
    二进制日志,默认情况下是没有开启的,需要到MySQL的配文件中开启,并配IMySQL日志的格式。
    配置文件位置: /usr/my.cnf
    日志存放位置:配置时,给定了文件名但是没有指定路径,日志默认写入Mysql的数据目录。
    日志格式:
    STATEMENT
    该日志格式在日志文件中记录的都是SQL语句( statement) , 每一条对数据进行修改的SQL都会记录在日志文件中,通过Mysq|提供的
    mysqbinlog工具,可以清晰的查看到每条语句的文本。主从复制的时候,从库( slave )会将日志解析为原文本,并在从库重新执行一-次。
    ROW
    该日志格式在日志文件中记录的是每一-行的数据变更,而不是记录SQL语句。比如,执行SQL语句: update tb. ,book set status='1',如果是
    STATEMENT日志格式,在日志中会记录一行SQL文件 ;如果是ROW ,由于是对全表进行更新,也就是每一-行记录都会发生变更 , ROW格式的日志
    中会记录每一行的数据变更。
    MIXED
    这是目前MySQL默认的日志格式,即混合了STATEMENT和ROW两种格式。默认情况下采用STATEMENT ,但是在一一些特殊情况下采用ROW来进行
    记录。MIXED 格式能尽量利用两种模式的优点,而避开他们的缺点。
    二进制日志读取:mysqlbinlog log-file;
    查看row格式日志:mysqlbinlog -w mysqlbin.000001
    日志的删除:reset master

    17.4 查询日志
    查询日志中记录了客户端的所有操作语句,而二进制日志不包含数据的sql语句
    配置:
    #该选项用来开启查询日志,可选值 : 0或者1 : 0代表关闭,1代表开启
    genera1_1og=1
    #设置日志的文件名,如果没有指定 ,默认的文件名为host_ name. 1og
    genera1_1og. filelfile. .name

    17.5慢查询日志
    慢查询日志记录了所有执行时间超过参数long. query, _time设置值并且扫描记录数不小于min, examined. row. Jimit的所有的SQL语句的日志。
    long, _query. time默认为10秒,最小为0,精度可以到微秒。
    配置:
    #该参数用来控制慢查询日志是香开启, 可取值: 1和0,1代表开启,0代表关闭
    slow_ query_1og=1
    #该参数用来指定慢查询日志的文件名
    s1ow_ query_1og. file=s low. query.1og
    #该选项用来配置查询的时间限制,超过这个时间将认为值慢查询, 将需要进行日志记录,默认10s
    long_query_time=10

    18.1 mysql复制
    复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做) , 从而使得从库和主
    库的数据保持同步。
    MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。

    18.2 mysql复制原理
    复制分成三步:
    Master 主库在事务提交时,会把数据变更作为时间Events记录在二进制日志文件Binlog中。
    主库推送二进制日志文件Binlog中的日志事件到从库的中继日志Relay Log。
    slave重做中继日志中的事件,将改变反映它自己的数据。

  • 相关阅读:
    轻重搭配
    EF的优缺点
    使用bootstrap-select有时显示“Nothing selected”
    IIS发布 HTTP 错误 500.21
    js添加的元素无法触发click事件
    sql server查看表是否死锁
    sql server把一个库表的某个字段更新到另一张表的相同字段
    SQLSERVER排查CPU占用高的情况
    SQL server中如何按照某一字段中的分割符将记录拆成多条
    LINQ to Entities does not recognize the method 'System.DateTime AddDays(Double)' method, and this method cannot be translated into a store expression.
  • 原文地址:https://www.cnblogs.com/dcpb/p/13196201.html
Copyright © 2011-2022 走看看