mysql

本文详细介绍了MySQL数据库的管理,包括创建和更改字符集、操作索引(普通索引、唯一索引、全文索引等)、创建和使用存储过程、事务处理(隔离级别、事务恢复)以及用户权限管理(创建用户、权限分配)。此外,还涉及到数据库的备份与恢复、日志管理和主从复制的基础知识。
摘要由CSDN通过智能技术生成

create table 表名 (id int ) [charset , character set ]=utf8 ;
alter table 表名 [charset , character set ]更改的字符集 ;
create database 库名 character  set utf8 collate utf8_bin;
查看字符集 show character set  ;
查看字符集排序方式 show collation ;
alter database 库名 character set utf8 collate utf8_bin ;
show databases ;
show tables;
show create tables 表名 ;
show create databases 库名 ; 
alter table 表名 rename 更改的表名 ;
添加列 alter table 表名 add 列名 列的类型 ;
更改列名 alter table 表名 change 原列名 新列名 原列名的类型 ;
更改类型 alter table 表名 modify 要更改的列名 列名的属性 ;  
更改列的位置 关键词 
语法
alter table 表名 modify 列名 列的类型 关键词 ; 
after 指定列的存放位置
first 放到第一位 

drop table 要删除的表名 ;
drop database 要删除的库名 ;
drop table 表名 , 表名2 以此类推 ;
删除主键  alter table 表名 drop primary key ;
删除外键  alter table 要删除外键的表名 drop froeign key 外键的名字 ;
查看引擎  show engines ;
修改表的引擎 alter table 表名 engine myisam ; 默认引擎为innodb    常用的引擎 , innodb myisam ;
desc 查看表的结构
ues 切换数据库
select * from 表名 ;
select * from 表名  where 表中的类  = '要查询的类的数据' ;
-------------------
类型  
整数类  tinyint , smallint , mediumint , int , bigint .    整数类可以指定无符号 ,unisgned  和补零符 zerofill . 
小数类  float , double , decimal . 小数类指定精度  M  D 小数点前面为M ,小数点后面为D ,整数部分的保留的位数看M-D 小数方面就看指定的D就可以 
字符类  tinytext , mediumtext , text , longtext , enum , set . 
时间类  date , datetime , time , timestamp , year 
-------------------
键值   
主键 primary key       alter table 表名 add primary key (表中要添加的列)  ;
外键 foreign key references   alter table 要添加类的表名 add foreign key(要添加的表名的列) references 以来的表(表中依赖的列)  依赖的列要为主键  ;    类型不同不能添加外键约束
唯一键 unique key      alter table 表名 add unique key (表中要添加的列)  ; 
非空键 not null        alter table 表名 modify 要更改的列  原列的类型  not null ;
默认键 default         alter table 表名 modify 要更改的列  原列的类型  defualt ; 
自增键 auto_increment  alter table 表名 modify 要更改的列  原列的类型  auto_incremnet  ; 要在有主键的列上添加 

-------------------
运算符 

算数运算符
 + 
 -
 *
 /
 % 取余
运算符 
in      示例 select 要查找的数据 in(表中的列) from  表名 ; 
not in  和上述相反
between and  select 10 between 10 and 20  ;
is null  查看一个值是否为空  select  age is null from jkm;  可以配合and  逗号, 小括号 同时使用
is not null 
least  选出最小值   select  least(  age ,28 ) from jkm;  比较表中 小于28岁的
greatest  选出最大值  seleect greatest ( age , 30 ) from jkm ; 比较表中 大于30岁的
like 判断是否一样     "_"可以答题任意一个字符   
regexp 支持正则表达式  
regexp 使用几种通配符:
'^' 用于匹配以什么开头的字符串
'$' 用于匹配以什么结尾的字符串
'.' 用于匹配任何一个单字符串
'[...]' 用于匹配在方括号内的任何字符
'*' 用于匹配零个或多个在它前面的字符
+ 匹配一次或多次
? 匹配零次或一次
select name regexp   '^张' from jkm ;

not  和 xor 
or 和  and  
-------------------
函数
绝对值函数abs
求余函数:mod
获取整数的函数ceil  floor
获取随机数的函数 rand
四舍五入的函数:round
截取数值的函数:truncate
符号函数 sign
幂运算函数: pow  power


计算字符串长度的函数:CHAR_LENGTH(str) 、LENGTH(str)
合并字符串的函数:CONCAT(s1,s2,...) 、CONCAT_WS(x,s1,s2,...)
替换字符串的函数:INSERT(s1,x,len,s2)
转换大小写的函数:LOWER(str) 、LCASE(str) 、UPPER(str) 、UCASE(str)
获取指定长度的字符串的函数:LEFT(s,n) 、RIGHT(s,n)
填充字符串的函数:LPAD(s1,len,s2) 、RPAD(s1,len,s2)
删除空格的函数:LTRIM(s) 、RTRIM(s) 、TRIM(s) 
删除指定字符串的函数:TRIM(s1 FROM s) 

重复生成字符串的函数:REPEAT(s,n)  
空格函数:SPACE(n)  
替换函数:REPLACE(s,s1,s2) s
比较字符串大小的函数:STRCMP(s1,s2) 
获取子字符串的函数:SUBSTRING(s,n,len) 、MID(s,n,len)  
匹配子字符串开始位置的函数:LOCATE(str1,str) 、POSITION(str1 IN str) 、INSTR(str, str1) 
反转字符串的函数:REVERSE(s)  reverse
返回指定位置的字符串的函数:ELT(n, s1, s2, s3, .....)  elt
返回指定字符串位置的函数:FIELD(s, s1, s2, .....) field
返回子字符串位置的函数:FIND_IN_SET(s1, s2)  find_in_set

日期和时间函数
获取当前日期的函数:CURDATE() 、CURRENT_DATE()
获取当前时间的函数:CURTIME() 、CURRENT_TIME()
获取当前日期和时间的函数:CURRENT_TIMESTAMP() 、LOCALTIME() 、NOW() 、SYSDATE()
获取时间戳的函数:UNIX_TIMESTAMP()
转换时间戳的函数:FROM_UNIXTIME()
获取 UTC 日期的函数:UTC_DATE()
获取 UTC 时间的函数:UTC_TIME()
获取月份的函数:MONTH(date) 、MONTHNAME(date)
获取星期的函数:DAYNAME(date) 、DAYOFWEEK(date) 、WEEKDAY(date) 、WEEK(date) 、
WEEKOFYEAR(date)

查看用户权限
show grants for 用户名登录方式

获取天数的函数:DAYOFYEAR(date) 、DAYOFMONTH(date)  
获取年份的函数:YEAR(date)
获取季度的函数:QUARTER(date) quarter 
获取分钟的函数:MINUTE(time)  minute
获取秒钟的函数:SECOND(time)  second
获取日期的指定值的函数:EXTRACT(type FROM date)  extract
时间和秒钟转换的函数:TIME_TO_SEC(time) 、SEC_TO_TIME(time)  time_to_sec sec_to_time
计算日期和时间的函数:DATE_ADD() 、ADDDATE() 、DATE_SUB() 、SUBDATE() 、ADDTIME() 、SUBTIME() 、DATEDIFF()
将日期和时间格式化的函数:DATE_FORMAT(date, format) 、TIME_FORMAT(time, format) 、
GET_FORMAT(val_type, format_type) 

%d该月日期,数字形式(00..31) 
%e该月日期,数字形式(0..31) 
%f微秒(000000...999999) 
%H以2位数表示24小时(00..23) 
%h,%I 以2位数表示12小时(01..12) 
%i分钟,数字形式(00-59) 
%j一年中的天数(001-366) 
%k以24小时(0-23) 
%l以12小时(0..12) 
%M月份名称(january..December) 
%m月份数字形式(00..12) 
%p上午(AM)或下午(PM) 
%r时间,12小时制(小时hh:分钟mm:秒钟ss后面加AM或PM)
%S,%s以2位数形式表示秒(00..59) 
%T时间,24小时制(小时hh:分钟mm:秒数ss) 
%U周(00..53),其中周日为每周的第一天 
%u周(00..53),其中周一为每周的第一天 
%V周(01..53),其中周日为每周的第一天,和%X一起使用 %v周(01..53),其中周一为每周的第一天,和%x一起使用
%W作日名称(周日..周六)
%w一周中的每日(0=周日..6=周六) 
%X该周的年份,其中周日为每周的第一天;数字形式4位数,和%V同时
使用 %x该周的年份,其中周一为每周的第一天;数字形式4位数,和%v同时使用 
%Y4位数形式表示年份 
%y2位数形式表示年份 
%% “%”文字字符


 IF() IF(expr, v1, v2) 
IFNULL()
 CASE 语法:CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END
五、系统信息函数
(1) 获取 MySQL 版本号的函数:VERSION()
(2) 查看当前用户的连接数的ID函数:CONNECTION_ID()
(3) 查看当前使用的数据库的函数:DATABASE() 、SCHEMA()  schema
(4) 查看当前登录的用户名的函数:USER() 、CURRENT_USER() 、SYSTEM_USER()
(5) 查看指定字符串的字符集的函数:CHARSET(str)
(6) 查看指定字符串的排列方式的函数:COLLATION(str)


(7) 获取最后一个自动生成的 ID 值得函数:LAST_INSERT_ID()
(1) 加密函数:PASSWORD(str) 、MD5(str) 、ENCODE(str, pswd_str)
(2) 解密函数:DECODE(crypt_str, pswd_str)
(1) 格式化函数:FORMAT(x, n) 
(2) 不同进制的数字进行转换的函数:CONV() 
(3) IP 地址与数字互相转换的函数:INET_ATON(expr) 、INET_NTOA(expr) 
(5) 重复执行指定操作的函数:BENCHMARK(count, expr)


-------------------------------------
查询语句语法
Name: 'SELECT'
Description:
Syntax:
SELECT
    select_expr [, select_expr] ...
      [FROM table_references]
    [WHERE where_condition]
    [GROUP BY {col_name  expr  position}
      [ASC  DESC], ... [WITH ROLLUP]]
    [HAVING where_condition]
    [ORDER BY {col_name  expr  position}
      [ASC  DESC], ...]
    [LIMIT {[offset,] row_count  row_count OFFSET offset}]

    分组 group by 
    max()最大 
    min()最小
    count()个数
    sum()合
    avg()平均
having 过率分组uits 
    group_concat(f_NAME) 显示名字
    with rollup 记录总和
with rollup with rollup 


内联  inner join
左外联 left outer join 
右外联 right outer join


内联的使用方法
select orderitems.f_id,item_price ,orders.o_date,c_id  from orderitems  INNER JOIN orders on   orders.o_num  = orderitems.o_num; 

关键字查询
any 满足任意一个条件
all 满足所有条件
in  满足in 里面的条件
exists 满足关键字里查询到返回前面内容查询不到不返回

合并查询
union  关键字
union all 不进行自动排序 , 不删除重复行

 索引创建,删除,添加,更改!

索引的分类 
普通索引   index    创建索引的列可以为空
多列索引   index(索引1 , 索引2)  创建索引的列可以为空  
唯一索引   unique key  创建索引的列不能为空
全文索引   fulltext  索引列能为空 只能对text类型进行封装
空间索引   spatial 空间索引创建索引的列不能为空  
空间索引的类型必须指定为geometry(几何)


在表中添加索引
alter table 表名 add 要添加索引的类型 要添加的索引的列
演示
alter table wbg add fulltext index (name);

在表中删除索引
语法
alter table 表名 drop index 要删除的索引
演示
alter table wbg drop index (name);

进阶
要删除多个索引和添加多个索引
添加多个演示
alter table wbg add fulltext index (name) , add unique key(id) ;
删除多个演示
alter table wbg drop index name , drop index id ; 
当然删除这里要看真正的索引名
------
查看表中的索引
show index from 表名
explain 测试表中的索引
explain select * from 表名 where 表中的索引名 ; 
show create table 表名 \G   查看表的详细信息


delete 语句
语法
DELETE FROM 表名称 WHERE 列名称 = 值
 
一张person表
Person
LastName  FirstName Address City
Gates Bill  Xuanwumen 10  Beijing
Wilson  Fred  Zhongshan 23  Nanjing

删除某行
"Fred Wilson" 会被删除:

DELETE FROM Person WHERE LastName = 'Wilson' 


删除表中所有内容 
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:

DELETE FROM table_name


用法 delete from salary where userid=(select id from user where sex='女');


-------------------------
视图部分
CREATE
      [OR REPLACE]
    VIEW view_name [(column_list)]
    AS select_statement

    [WITH [CASCADED  LOCAL] CHECK OPTION]
  
   
  ALTER

    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED  LOCAL] CHECK OPTION]
  
  
UPDATE  table_reference
    SET assignment_list
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

value:
    {expr  DEFAULT}

assignment:
    col_name = value

assignment_list:
    assignment [, assignment] ...
  
  
___________
DELETE  FROM tbl_name
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
  
---------------
DROP VIEW [IF EXISTS]
    view_name [, view_name] 

-----------------------

存储过程   

CREATE
    [DEFINER = user]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN  OUT  INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic: {
    COMMENT 'string'
   LANGUAGE SQL
   [NOT] DETERMINISTIC
   { CONTAINS SQL  NO SQL  READS SQL DATA  MODIFIES SQL DATA }
   SQL SECURITY { DEFINER  INVOKER }
}


delimiter %%

create procedure test2()
begin
  select * from t1 where name='zhs';
  select * from t1 where id=3;
end %%

delimiter ;

delimiter $$
create procedure test3(in a int)
begin
select * from stu_score where score >= a;
end $$
delimiter ;

------------------
CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list] ...
    [ELSE statement_list]
END CASE


+++
delimiter $$
create procedure testa1(in chars varchar(10))
begin
case chars
when "a" then select * from stu_score where score>=60;
when "b" then select * from stu_score where score>=80;
when "c" then select * from stu_score where score>=90;
else select * from stu_score;
end case;
end$$
delimiter ;

+++++
Name: 'DECLARE VARIABLE'
Description:
Syntax:
DECLARE var_name [, var_name] ... type [DEFAULT value]

Syntax:
WHILE search_condition DO
    statement_list
END WHILE

delimiter $$
create procedure testa3()
begin
declare num int default 0;
declare summ int default 0;
while num<=100 do
set summ=summ+num;
set num=num+1;
end while;
select summ;
end $$
delimiter ;


delimiter $$
create procedure testa4(in a int)
begin
declare num int default 0;
declare summ int default 0;
while num<=a do
  set summ=summ+num;
  set num=num+1;
end while;
select summ;
end $$
delimiter ;

==============
Syntax:
REPEAT
    statement_list
UNTIL search_condition
END REPEAT

delimiter $$
create procedure testa5(in a int)
begin
declare num int default 0;
declare summ int default 0;
repeat
  set summ=summ+num;
  set num=num+1;
until num>a end repeat;
select summ;
end $$
delimiter ;

------------
Name: 'CREATE TRIGGER'
Description:
Syntax:
CREATE
    TRIGGER trigger_name
    { BEFORE  AFTER } { INSERT  UPDATE  DELETE }
    ON tbl_name FOR EACH ROW

    trigger_body

delimiter $$
create trigger test1
after insert
on miorders
for each row
begin 
update mistore set s_quantity=s_quantity-new.s_count where s_id=new.s_id;
end $$
delimiter ;

100-2
insert into miorders(o_id,s_id,s_count) values (4,1,2);

delimiter $$
create trigger test2
after delete
on miorders
for each row
begin
update mistore set s_quantity=s_quantity+old.s_count where s_id=old.s_id;
end $$
delimiter ;

delimiter $$
create trigger test3
after update
on miorders
for each row
begin
update mistore set s_quantity=s_quantity-(new.s_count-old.s_count)  where s_id=old.s_id;
end $$
delimiter ;

-------------
增加一条学生记录时,会自动检查年龄是否符合范围要求。
每当删除一条学生信息时,自动删除其成绩表上的对应记录。
每当删除一条数据时,在数据库存档表中保留一个备份副本

create table student(s_id int, s_name varchar(20)) ;
alter table student add  age int ;
insert into student values('1','zhangsan','18') , ('2','lisi','20') , ('3','wangwu','18');

create table score (s_id int , s_score float(3,1));
 insert into score values(1,'76.5') , (2,'90.5' )  , (3,'88.8');

create table bak(bak text );


--------------------
事务
A 原子性(atomicity):一个事务必须被视为一个不可分割的单元。
C 一致性(consistency):数据库是从一种状态切换到另一种状态。
I 隔离性(isolation):事务在提交之前,对于其他事务不可见。
D 持久性(durablity):一旦事务提交,所修改的将永久保存到数据库 

事务开始: start transaction
事务开始: begin
事务提交: commit
回 滚: rollback


查看自动提交还是手动提交事务
shwo variables like 'autocommit'


set autocommit = 0 ; 修改autocommit 为手动

事务有4种隔离级别 事务在提交之前对其他事务可不可见
1. read-uncommitted(未提交读)
2. read-committed(已提交读)
3. Repeatable read(可重复读)
4. serializable (可串行化) 

设置事务级别

SET SESSION TX_ISOLATION='READ-UNCOMMITTED';
set session tx_isolation='级别' ; 


隔离级别 脏读 不可重复 幻读 加锁读
未提交读 是 是 是 否
提交读 否 是 是 否
可重复读 否 否 是 否
串行读 否 

---------------------------------
用户与权限

创建用户

create user '用户名'@'登录方式' identified by '123'

select password('1234')

CREATE USER 'zhanger'@'localhost'   
identified by password '*AC241830FFDDC8943AB31CBD47D758E79F7953EA';


使用grant 来创建用户 
语法
grant 赋予的权限 on 哪个库.哪个表 to '用户名'@'什么方式登录' identified by '密码'

GRANT SELECT,UPDATE ON *.* TO 'testUser'@'localhost' IDENTIFIED BY '123.com';

查看 就用select 语句查询就可以

插入创建
INSERT INTO mysql.user(Host,User,Password) VALUES('localhost','username',PASSWORD('password'));
插入创建的用户数据无法直接使用必须用FLUSH privileges; 来刷新告诉mysql服务器才能生效

提示:INSERT 需要使用PASSWORD()函数加密密码;GRANT语句会自动将密码加密后存入user表,因此不需要password()

删除用户
使用delete语句删除用户
DELETE FROM mysql.user WHERE host='localhost' and user='tom';

root 用户修改自己密码
mysqladmin -u root -p password "rootpassword"
set password = passwrod('a')

root 修改普通用户密码
FLUSH PRIVILEGES
    usage
GRANT USAGE ON *.* TO 'testUser'@'localhost' IDENTIFIED BY '123.com';
set password for user@localhost = password('ads') 
回收权限
 REVOKE INSERT ON *.* FROM 'tom'@'localhost';

 mysql root密码丢失
 mysqld_safe --skip-grant-tables user=mysql
 /etc/init.d/mysqld restart --skip-grant-tables 

 --skip-grant-tables 
 cd /etc/init.d/mysqld restart --skip-grant-tables


 --skip-grant-tables  

-------------------
日志 
error.log 错误日志 (记录记录mysql服务的启动,运行或停止mysql服务时出现的问题)

log-bin =(二进制日志的存放地 )(二进制日志存放增删改日志)
expire_logs_days = 10  (多少天清理一次二进制日志文件)
max_binlog_size=100M(单个日志文件的大小限制,超出会新建一个)

查看二进制日志文件
show master logs;
show binary logs;
在命令行下用 mysql提供的binlog工具
mysqlbinlog mysql-bin.000001

删除二进制日志文件
删除指定文件的
PURGE MASTER LOGS TO "mysql-bin.000012";
删除指定日期的
PURGE MASTER LOGS BEFORE '20170101';

暂停二进制日志文件服务
SET sql_log_bin = 0  (0暂停 , 1恢复)
 
innodb 事务日志
 innodb_flush_log_at_timeout  1 
 innodb_flush_log_at_trx_commit  1 (设置级别)
 innodb_locks_unsafe_for_binlog  ON (开启)

慢日志查询
slow_query_log
slow_query_log_file (定义慢日志存放位置)
long_query_time (设置慢日志查询的时间)

mysqldumpslow mysqld-slow.log(查看慢日志)
mysqldumpslow 的参数
注: mysqldumpslow -s c -t 10 /database/mysql/slow-query.log这会输出记录次数最多的10条SQL语句
其中: -s,是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时
间、返回的记录数来排序,ac、at、al、ar,表示相应的倒序; -t,是top n的意思,即为返回前面多少条
的数据; -g,后边可以写一个正则匹配模式,大小写不敏感的

mysql共享表空间
show variables like 'innodb_file_per'
innodb_file_per_table=0   (0代表共享表空间 ,1代表独立表空间)
innodb_data_file_path=ibdata1(共享表空间的名字):60M:autoextend
innodb_data_home_dir=/usr/local/mysql/data


--------
mysql数据库工具

Where command is a one or more of: (Commands may be shortened)
  create databasename   Create a new database (创建数据库)
  debug                 Instruct server to write debug information to log (指示服务器将调试信息写入日志)
  drop databasename    语法drop  库名 Delete a database and all its tables (删除数据库及其所有表)
  extended-status       Gives an extended status message from the server (给出来自服务器的扩展状态消息)
  flush-hosts           Flush all cached hosts (刷新所有主机)
  flush-logs            Flush all logs (刷新所有日志)
  flush-status          Clear status variables (清除状态变量)
  flush-tables          Flush all tables (刷新所有表)
  flush-threads         Flush the thread cache  (刷新线程缓存)
  flush-privileges      Reload grant tables (same as reload) (重新加载授权表)
  kill id,id,...        Kill mysql threads (杀死 id)
  password [new-password] Change old password to new-password in current format  (将旧密码修改为当前格式的新密码)
  ping                  Check if mysqld is alive  (检测mysql是否存货)
  processlist           Show list of active threads in server  (显示服务器中的活动线程列表)
  reload                Reload grant tables  (刷新所有表)
  refresh               Flush all tables and close and open logfiles (刷新所有表,关闭和打开日志文件)
  shutdown              Take server down (关闭服务器)
  status                Gives a short status message from the server  (显示简短的mysql信息)
  start-slave           Start slave   
  stop-slave            Stop slave 
  variables             Prints variables available  (打印可用的变量)
  version               Get version info from server  (从服务器获取版本信息)
  
  mysql 
  -e   不交互式写命令
  -H   导出HTML 语句
  -E   垂直打印查询的输出(行)
  -X   导出XML 语句
  -S   ——socket=命名用于连接的套接字文件。
  prompt  ——prompt=name设置mysql提示符为这个值  [mysql] 在mysql配置
  \u:连接用户
\h:连接主机
\d:连接数据库
\r:\m:\s:显示当前时间

  tee  ——tee=name将所有内容添加到outfile中参见交互式帮助(\h)
[client] (tee 添加进mysql系统配置文件中 在[client]下添加)


mysql 压测工具
mysqlslap
 
mysqlslap --defaults-file=/etc/my.cnf -c 300 -i 2 -a -x 20 -y 20  --auto-generate-sql-add-autoincrement   --auto-generate-sql-load-type=mixed -e myisam,innodb --number-of-queries=500 -uroot -p123 -v

mysqlslap --defaults-file=/etc/my.cnf -c 80 -i 2 -e myisam,innodb --number-of-queries=10 -q "select * from test1.tb1" --create-schema="test1" -uroot -p123 -v


常用的选项
--defaults-file  指定mysql主配文件 
--concurrency    并发数量,多个可以用逗号隔开
--engine      要测试的引擎,可以有多个,用分隔符隔开,如--engines=myisam,innodb
--iterations      要运行这些测试多少次
--auto-generate-sql        用系统自己生成的SQL脚本来测试、
--number-int-cols             创建测试表的int型字段数量
--number-char-cols             创建测试表的chat型字段数量
--auto-generate-sql-add-autoincrement 添加autoincrement(自增)键值 
--auto-generate-sql-load-type    要测试的是读还是写还是两者混合的(read,write,update,mixed)
--number-of-queries           总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算
--debug-info               额外输出CPU以及内存的相关信息
--create-schema             测试的database
--query 自己的SQL           脚本执行测试
--only-print                 如果只想打印看看SQL语句是什么,可以用这个选项
--csv=/root/a.csv                    将获取的数据转换为图标

mysql 优化  
相关优化参数总结
[mysqld]
server_id=1 (指定身份必写)  
slow_query_log = 1
开启慢日志查询
slow_query_log_file = /usr/local/mysql/data/slow-query.log
将查询到的慢日志数据放到指定位置
long_query_time = 1
慢日志的条件 这条意思为查询时间为一秒
log-queries-not-using-indexes
不使用索引的日志查询
max_connections = 1024
最大链接数为1024个
back_log = 128
缓存请求连接数
wait_timeout = 60
使用交互式工具链接的等待时间
interactive_timeout = 7200
客户端链接mysql的等待时间
key_buffer_size=256M
myisam引擎中索引的缓存大小 索引读取的速度
query_cache_size = 256M
查询缓冲区域大小的设置
query_cache_type=1
有三个模式 1 最慢最安全 2 都一般 0 最快最不安全
query_cache_limit=50M
限制缓存的内容最多为50M
max_connect_errors=20
登录mysql最大失误次数为20次
sort_buffer_size = 2M
排序的线程的一个2M的缓冲区 order by group by
max_allowed_packet=32M
插入数据的最大值为32M
join_buffer_size=2M
链接缓存为2M
thread_cache_size=200
线程链接为200
innodb_buffer_pool_size = 2048M
innodb引擎中索引的缓存 索引读取的速度
innodb_flush_log_at_trx_commit = 1
主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0、1、2三个。
innodb_log_buffer_size=32M
日志所用内存大小
innodb_log_file_size=128M
超过128M自动创建一个新的事务日志文件
innodb_log_files_in_group=3
分别向三个事务日志文件中插入数据
log-bin=mysql-bin
二进制日志文件名
binlog_cache_size=2M
二进制日志的缓存
max_binlog_cache_size=8M
最大能使用二进制日志缓存的大小
max_binlog_size=512M
指定binlog日志文件大大小超过会新建
expire_logs_days=7
超过七天的二进制日志文件将会自动删除
read_buffer_size=1M
读缓冲区大小
read_rnd_buffer_size=16M
随机读缓冲区大小
bulk_insert_buffer_size=64M
批量插入数据缓存大小
log-error = /usr/local/mysql/data/mysqld.err
错误日志 

-----------------------
[mysqld]
slow_query_log = 1
slow_query_log_file = /usr/local/mysql/data/slow-query.log
long_query_time = 1
log-queries-not-using-indexes
max_connections = 1024
back_log = 128
wait_timeout = 60
interactive_timeout = 7200
key_buffer_size=256M
query_cache_size = 256M
query_cache_type=1
query_cache_limit=50M
max_connect_errors=20
sort_buffer_size = 2M
max_allowed_packet=32M
join_buffer_size=2M
thread_cache_size=200
innodb_buffer_pool_size = 2048M
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size=32M
innodb_log_file_size=128M
innodb_log_files_in_group=3
log-bin=mysql-bin
binlog_cache_size=2M
max_binlog_cache_size=8M
max_binlog_size=512M
expire_logs_days=7
read_buffer_size=1M
read_rnd_buffer_size=16M
bulk_insert_buffer_size=64M
log-error = /usr/local/mysql/data/mysqld.err


----------------------------
备份还原
查看所有二进制日志
show master logs ; 
查看二进制日志详细信息
show binlog events ;
查看指定二进制日志详细信息
show binlog events in '二进制日志名'  ; 
清空所有二进制日志文件
reset master 
删除指定二进制日志之前的二进制日志
purge master logs to '二进制日志文件名'

linux 下查看二进制日志工具
mysqlbinlog  -[可选] '日志名' 
[可选]
-v 详细信息
-vv 超级详细信息
 --stop-position=#  保留pos前的信息
 --start-position=# 保留pos后的信息 
--start-position --stop-position


mysqldump  工具 
语法
Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

-A --all-databases 备份所有数据库
-B, --databases  备份指定库


mysql管理工具percona-toolkit and percona-xtrabackup
备份工具使用
完全备份
innobackupex先做完全备份 命令如下:
# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123456"
/opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S) --no-timestamp

再进行增量备份,命令如下:
# innobackupex --incremental /opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --
incremental-basedir=/opt/mysqlbackup/full/full_incre_20160912_235237/ --user=root
--password="123456" --no-timestamp

开始做恢复,恢复全备份 命令如下:
# innobackupex --apply-log --redo-only
/opt/mysqlbackup/full/full_incre_20160912_235237/
部分显示信息如下图所示:
--redo-only 用于准备增量备份内容把数据合并到全备份目录,配合incremental-dir 增量备份目录使用

备份进行第一次增量备份的恢复 命令如下:
第十六章备份还原.md 1/14/2020
25 / 26
# innobackupex --apply-log --redo-only
/opt/mysqlbackup/full/full_incre_20160912_235237/ --incremental-
dir=/opt/mysqlbackup/inc/incre_20160912_235636/


将增量备份的内容加到全被上使他们组合

组合完成后恢复数据库
先停掉数据库
systemctl stop mysqld

 innobackupex --defaults-file=/etc/my.cnf --user=root --password="123456" --copy-
back /opt/mysqlbackup/full/full_incre_20160912_235237
恢复数据库
更改文件权限为mysql用户
chown -R mysql:mysql /usr/local/mysql/data

启动服务
systemctl start mysqld

数据恢复

备份完文件可以到
 xtrabackup_checkpoints 文件来查看备份的状态
 很重要的文件


 mysql主从复制


mysql主配置
grant replication slave , replication client on *.* to 'user1'@'%' identified by '123';
开启二进制文件
开启serverid

mysql从配置
change master to master_host='' , master_user='' , master_password='' , master_log_file='' , master_log_pos=  
start slave 
开启中继日志
relay-log=relay.log
查看状态
show slave status ;


mysql双主以及keepalived

看文档
双主和主从复制一样
中继日志
relay-log= 中继日志名
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐韦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值