mysqlimport 将格式化文件导入mysql表

pre: has to wiki
mysqlimport [options] db_name textfile1 [textfile2 …]
其中db_name为要插入的数据库名字,textfile为要插入的格式化数据所在的文件,文件里的数据插入到文件名去掉后缀后剩余名字对应的表中
比如:mysqlimport [省略选项] Statistic Spam.txt
会把Spam.txt中的数据插入到数据库名为Statistic,表名为Spam的数据表中

mysqlimport --local -u$dbuser -p"$dbpw" -h$dbip --lines-terminated-by="\n" --fields-terminated-by="^" -P$dbport d_logs ${logstat_table}.txt --columns=act,content,ctime

下面介绍一些mysqlimport常用到的选项

–lines-terminated-by=
数据行以什么结束,参数为字符串,windows默认为\r\n

–fields-terminated-by=
数据域以什么结束,参数为字符串,默认为\t

–columns=第一列对应的数据表列名,第二列对应的数据表列名,…
定义被导入文件中的每一列对应的数据库表列名

参考
http://blog.csdn.net/anljf/article/details/6600602

mysql批量删除指定前缀或后缀的表

[root@ evan]# mysql -uroot -pKK8,cn23Rdt -h127.0.0.1 -P3307 -e " use dk_stat; show tables like 'log_role%'";

log_role_20160801
log_role_20160802
log_role
log_role_201609
log_role_201610
log_role_temp

分析 利用三重循环删除 分别删除 三种类型 单月 log_role_201601,单月加单日 log_role_20160801 和其它 log_role_20160811

#/bin/bash
#mytable=log_statdatas_20160
mytable=log_activate_20160
for tab0 in `seq 01 08`
do
for tab1 in `seq 1 9`
do

for tab2 in `seq 1 30`
do

mysql -uroot -p'KK8' -h127.0.0.1 -P3307 -e "use dk_stat; drop table ${mytable}${tab0}";
mysql -uroot -p'KK8' -h127.0.0.1 -P3307 -e "use dk_stat; drop table ${mytable}${tab0}0${tab1}";
mysql -uroot -p'KK8' -h127.0.0.1 -P3307 -e "use dk_stat; drop table ${mytable}${tab0}${tab2}";

done

done
done

MySQL取消权限和删除用户–tag

作为数据库的管理员,既然能够创建用户和授权,同样也可以取消授权和删除用户。要取消某个用户的权限,可以使用REVOKE语句。该语句的语法格式如下:
Revoke privileges (columns) on what from user ;
其中privileges是要取消的权限,user是要被取消权限的用户名。
示例:

下面的代码实现了取消sss用户的所有权限的功能。 如果是密码授错了,可以直接用这个,不用删除用户
revoke all on *.* from sss@localhost ;
Query OK, 0 rows affected (0.00 sec)
REVOKE语句只能取消用户的权限,而不可以删除用户。即使取消了所有的权限,用户仍然可以连接到服务器。要想彻底的删除用户,必须使用DELETE语句将该用户的记录从MySQL数据库中的user表中删除。
该语句的语法格式如下:
Delete from user where user = "user_name" and host = "host_name" ;
使用DELETE删除用户sss,代码如下:

delete from user where user='sss' and host='localhost' ;
flush privileges ;

其中,delete用于删除用户,flush告诉服务器重新加载授权表。

mysql5.6 rpm 打包过程和错误记录

ip 192.168.1.116
root
12345678

ps:
my.cnf
# by evan
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
binlog_ignore_db = include_database_name

一开始打包编译不过是因为 我以前在打包5.5 时加了
# by evan 20180824pm
#CFLAGS=”-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing”
#CXX=g++
#CXXFLAGS=”-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing”
#export CFLAGS CXX CXXFLAGS

[root@localhost ~]# rpm -ivh dkm_mysql-5.6.32-1.0.x86_64.rpm
Preparing… ########################################### [100%]
1:dkm_mysql ########################################### [100%]
cp: 无法获取”/data/apps/mysql/support-files/mysql.server” 的文件状态(stat): 没有那个文件或目录
chmod: 无法访问”/etc/rc.d/init.d/mysqld”: 没有那个文件或目录
在 mysqld 服务中读取信息时出错:没有那个文件或目录
/var/tmp/rpm-tmp.621ZR9: line 19: /etc/init.d/mysqld: 没有那个文件或目录
/var/tmp/rpm-tmp.621ZR9: line 20: /data/apps/mysql/bin/mysqladmin: 没有那个文件或目录
no crontab for root

[root@localhost bin]# 160825 09:54:18 mysqld_safe Logging to ‘/data/logs/mysql/mysqld-error.log’.
touch: 无法创建”/data/logs/mysql/mysqld-error.log”: 没有那个文件或目录
chmod: 无法访问”/data/logs/mysql/mysqld-error.log”: 没有那个文件或目录
touch: 无法创建”/data/logs/mysql/mysqld-error.log”: 没有那个文件或目录
chown: 无法访问”/data/logs/mysql/mysqld-error.log”: 没有那个文件或目录
160825 09:54:18 mysqld_safe Starting mysqld daemon with databases from /data/mysql/
./mysqld_safe: line 129: /data/logs/mysql/mysqld-error.log: 没有那个文件或目录
./mysqld_safe: line 166: /data/logs/mysql/mysqld-error.log: 没有那个文件或目录
touch: 无法创建”/data/logs/mysql/mysqld-error.log”: 没有那个文件或目录
chown: 无法访问”/data/logs/mysql/mysqld-error.log”: 没有那个文件或目录
chmod: 无法访问”/data/logs/mysql/mysqld-error.log”: 没有那个文件或目录
160825 09:54:18 mysqld_safe mysqld from pid file /data/mysql//localhost.localdomain.pid ended
./mysqld_safe: line 129: /data/logs/mysql/mysqld-error.log: 没有那个文件或目录

[1]+ Exit 1 ./mysqld_safe

[root@localhost ~]# rpm -ivh dkm_mysql-5.6.32-1.0.x86_64.rpm
Preparing… ########################################### [100%]
chown: 无法访问”/data/logs/”: 没有那个文件或目录
error: %pre(dkm_mysql-5.6.32-1.0.x86_64) scriptlet failed, exit status 1
error: install: %pre scriptlet failed (2), skipping dkm_mysql-5.6.32-1.0

打包错误
warning: Could not canonicalize hostname: dkm-lnmp-test

安装错误
[root@localhost ~]# rpm -ivh dkm_mysql-5.6.32-1.0.x86_64.rpm
Preparing… ########################################### [100%]
1:dkm_mysql ########################################### [100%]
Starting MySQL… ERROR! The server quit without updating PID file (/data/mysql//localhost.localdomain.pid).
/data/apps/mysql/bin/mysqladmin: connect to server at ‘localhost’ failed
error: ‘Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)’
Check that mysqld is running and that the socket: ‘/tmp/mysql.sock’ exists!

上面的错误 搞了哥两天呀

原因
打包成功mysql 5.6 一开始是参数 搞错 还有就是 /da/app/mysql 里面有 my.cnf

解决办法
1.打包( 安装)时指定了my.cnf (-DSYSCONFDIR=/etc) # 我采取了这种办法
2./da/app/mysql 里面有 my.cnf

重新配置vi /etc/my.cnf 加入

别人的说的办法
#在[mysqld]中添加:
datadir = /usr/local/mysql/data
log-error = /usr/local/mysql/data/error.log
pid-file = /usr/local/mysql/data/mysql.pid
user = mysql
tmpdir = /tmp
#保存退出
#初始化数据库

./mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data –pid-file=/usr/local/mysql/data/mysql.pid –tmpdir=/tmp

mysql binlog开启和使用

基础知识
二进制日志由配置文件的log-bin选项负责启用,Mysql服务器将在数据根目录创建两个新文件XXX-bin.001和XXX-bin.index,若配置选项没有给出文件名,Mysql将使用主机名称命名这两个文件,其中.index文件包含一份全体日志文件的清单。Mysql会把用户对所有数据库的内容和结构的修改情况记入XXX-bin.n文件,而不会记录SELECT和没有实际

使用日志进行数据库恢复
如果遇到灾难事件,应该用最近一次制作的完整备份恢复数据库,然后使用备份之后的日志
文件把数据库恢复到最接近现在的可用状态。
使用日志进行恢复时需要依次进行,即最早生成的日志文件要最先恢复:
mysqlbinlog xxx-bin.00001 | mysql -u root -p
mysqlbinlog xxx-bin.00002 | mysql -u root -p

开启方法如下

1.linux 在my.cnf
[mysqld]
# by evan
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
binlog_ignore_db = include_database_name

2.windows 在my.ini(window)配置文件里面[mysqld]添加
[mysqld]
# by evan
expire_logs=5
#log-bin=D:/MysqlData/data/log-bin/logbin.log
log-bin=D:/MysqlData/Data/log/mysql-bin
binlog-ignore-db=ignore-dbname

恢复举例
mysqlbinlog -d games_s25 --start-datetime="2016-07-25 02:05:00" --stop-datetime="2016-07-25 04:40:00" "mysql-bin.000201" | mysql -uroot -ppassword

MySQL 查询缓存

mysql开启查询缓存,一般默认是开启了的 (have_query_cache 部分为yes)
mysql> show variables like '%cache%';
+——————————+———————-+
| Variable_name | Value |
+——————————+———————-+
| binlog_cache_size | 32768 |
| binlog_stmt_cache_size | 32768 |
| have_query_cache | YES |
| key_cache_age_threshold | 300 |
| key_cache_block_size | 1024 |
| key_cache_division_limit | 100 |
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_stmt_cache_size | 18446744073709547520 |
| metadata_locks_cache_size | 1024 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 0 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
| stored_program_cache | 256 |
| table_definition_cache | 400 |
| table_open_cache | 64 |
| thread_cache_size | 0 |
+——————————+———————-+

查看是否缓存:
mysql> show status like '%Qcache%';

看到所有项目为0,表示缓存功能并没有运行起来。

修改my.cnf配置文件,添加:

query_cache_type = 1
#0 -– 不启用查询缓存;
1 -– 启用查询缓存,只要符合查询缓存的要求,客户端的查询语句和记录集斗可以缓存起来,共其他客户端使用;
2 -– 启用查询缓存,只要查询语句中添加了参数:SQL_CACHE,且符合查询缓存的要求,客户端的查询语句和记录集,则可以缓存起来,共其他客户端使用;
query_cache_limit = 1M //限制查询缓存大小
query_cache_size = 32M //设置缓存占用内存大小

http://www.68idc.cn/help/server/20150703413117.html

MySQL 查询缓存
http://www.cnblogs.com/xiaocen/p/3720337.html

mysql study之常用操作-tag

有个哥说介绍一些mysql常用操作,于是有了此文

补充
RDBS, Relation data base system(关系型数据库系统),数据以二维表形式存储,每行(row)代表同一行数据,为记录
每列表示记录中的某个属性,为字段也

不能用 kill -9 因为会 自动重启 mysql service
root@debian:/# mysqladmin -pevan shutdown
root@debian:/h# ps -ef | grep mysqld
root 9950 5490 0 19:11 pts/0 00:00:00 grep mysqld

root@debian:# mysqladmin -pevan status
mysqladmin: connect to server at ‘localhost’ failed
error: ‘Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)’
Check that mysqld is running and that the socket: ‘/var/run/mysqld/mysqld.sock’ exists!

rm -f /var/run/mysqld/mysqld.sock

root@debian:# mysqladmin -pevan status
Uptime: 19 Threads: 1 Questions: 2 Slow

p628 /etc/init.d/mysqld

mysql> show variables like ‘%buffer%’;
+——————————+———–+
| Variable_name | Value |
+——————————+———–+
| bulk_insert_buffer_size | 8388608 |
| innodb_buffer_pool_instances | 1 |
| innodb_buffer_pool_size | 134217728 |
| innodb_change_buffering | all |
| innodb_log_buffer_size | 8388608 |
| join_buffer_size | 131072 |
| key_buffer_size | 16777216 |
| myisam_sort_buffer_size | 8388608 |
| net_buffer_length | 16384 |
| preload_buffer_size | 32768 |
| read_buffer_size | 131072 |
| read_rnd_buffer_size | 262144 |
| sort_buffer_size | 2097152 |
| sql_buffer_result | OFF |
+——————————+———–+

mysqladmin

#change the root password is 123456
mysqladmin -uroot -p password 123456

evan@debian:~/bakkali/software$ mysqladmin -uroot -p processlist
Enter password:
+—-+——+———–+—-+———+——+——-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+——+———–+—-+———+——+——-+——————+
| 53 | root | localhost | | Sleep | 118 | | |
| 54 | root | localhost | | Query | 1 | | show processlist |
+—-+——+———–+—-+———+——+——-+——————+

26.5 p639
mysql> show tables;
+—————————+
| Tables_in_mysql |
+—————————+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |

mysql> describe user;
+————————+———————————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+————————+———————————–+——+—–+———+——-+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum(‘N’,’Y’) | NO | | N | |
| Insert_priv | enum(‘N’,’Y’) | NO | | N | |
| Update_priv | enum(‘N’,’Y’) | NO | | N | |

#创建表
CREATE TABLE IF NOT EXISTS employees ( #
EMPLOYEE_ID varchar(10) not null, #// EMPLOYEE_ID 字段的类型为varchar(10),字段值不允许为空
FIRST_NAME varchar(10) not null,
LAST_NAME varchar(10) not null,
EMALL varchar(50) not null,
HIRE_DATE date, #date 类型
JOB_ID int not null,
SALARY int default 0, #//SALARY 字段默认值为0
MANAGER_ID int ,
DEPARTMENT_ID int not null,
primary key (EMPLOYEE_ID) ) #// 主键为EMPLOYEE_ID
#// 使用数据库引擎为MyISAM
ENGINE=MyISAM DEFAULT CHARSET=utf8;

mysql> describe employees;
+—————+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+—————+————-+——+—–+———+——-+
| EMPLOYEE_ID | varchar(10) | NO | PRI | NULL | |
| FIRST_NAME | varchar(10) | NO | | NULL | |
| LAST_NAME | varchar(10) | NO | | NULL | |
| EMALL | varchar(50) | NO | | NULL | |
| HIRE_DATE | date | YES | | NULL | |
| JOB_ID | int(11) | NO | | NULL | |
| SALARY | int(11) | YES | | 0 | |
| MANAGER_ID | int(11) | YES | | NULL | |
| DEPARTMENT_ID | int(11) | NO | | NULL | |
+—————+————-+——+—–+———+——-+
9 rows in set (0.00 sec)

#######################
修改新密码
use mysql;
update user set password=PASSWORD('evan') where user='root'; #
##最好要加这一行
flush privileges;

shell>mysqladmin -uroot -p password  新密码
# 然后在提示符后输入老密码

增加新用户

格式:grant select on 数据库.* to 用户名@登录主机 identified by ‘密码’
举例:
例 1:增加一个用户 test1 密码为 abc,让他可以在任何主机上登录,并对所有数据库有
查询、插入、修改、删除的权限。首先用以 root 用户连入 MySQL,然后键入以下命令:
mysql> grant select,insert,update,delete on *.* to test1@localhost identified by 'abc';
Query OK, 0 rows affected
#或者
mysql> grant all privileges on *.* to test1@localhost identified by 'abc';
flush privileges;

删除用户
delete from user where user=’用户名’ and host=’localhost’;
delete from user where user='test2' and host='localhost';
flush privileges;

查看当前使用的数据库
select database();

表操作

备注:操作之前使用“use <数据库名>”应连接某个数据库。
建表
命令:create table <表名> (<字段名 1> <类型 1> [,..<字段名 n> <类型 n>]);

create table mm(
id int(4) not null primary key auto_increment,
name char(20) not null,
sex int(4) not null default '0',
degree double(16,2))
#ENGINE=InnoDB;
ENGINE=MyISAM DEFAULT CHARSET=utf8;

获取表结构
命令: desc 表名,或者show columns from 表名
mysql> describe my;
mysql> desc my;
show columns from my;

删除表
drop table

插入数据
命令:insert into <表名> [( <字段名 1>[,..<字段名 n > ])] values ( 值 1 )[, ( 值 n )]
mysql> insert into my values(1,'tom',0,96);
mysql> insert into my(name,sex,degree) values('evan',1,90);

查询表中的数据
mysql> select * from my;
+—-+——+—–+——–+
| id | name | sex | degree |
+—-+——+—–+——–+
| 1 | tom | 0 | 96.00 |
| 2 | evan | 1 | 90.00 |
+—-+——+—–+——–+

#前 2 行数据
select * from my limit 0,2;
select * from my order by id limit 0,2;

删除表中数据
命令:delete from 表名 where 表达式
delete from my where id=2;

修改表中数据
命令:update 表名 set 字段=新值,… where 条件
update my set name=’eva’ where id=1;
mysql> select * from my order by id limit 0,2;
+—-+——+—–+——–+
| id | name | sex | degree |
+—-+——+—–+——–+
| 1 | eva | 0 | 96.00 |
+—-+——+—–+——–+

在表中增加字段
命令:alter table 表名 add 字段 类型 其他;
例如:在表 MyClass 中添加了一个字段 pass,类型为 int(4),默认值为 0
mysql> alter table my add pass int(4) default '0';

更改表名
命令:rename table 原表名 to 新表名;
rename table my to mm;

更新字段内容
命令:update 表名 set 字段名 = 新内容
update 表名 set 字段名 = replace(字段名, ‘旧内容’, ‘新内容’);
update my set name='nick' where name='eva';
update my set name=replace(name,'jkjk','evan');

数据库导入导出

将数据库 com 中的 my 导出到 文件中
mysqldump -uroot -pevan com my > my.sql

数据库 mydb 的结构导出到 e:\MySQL\mydb_stru.sql 文件中
mysqldump -uroot -pevan com --add-drop-table >com.stru.sql

只导出数据不导出数据结构
mysqldump -u [数据库用户名] -p -t [要备份的数据库名称]>[备份文件的保存路径]
mysqldump -uroot -pevan -t com >com0.sql

#here
导出数据库中的Events
格式:mysqldump -u [数据库用户名] -p -E [数据库用户名]>[备份文件的保存路径]

导出数据库中的存储过程和函数
格式:mysqldump -u [数据库用户名] -p -R [数据库用户名]>[备份文件的保存路径]

从外部文件导入数据库中
1)使用“source”命令

2)使用 “<” 小于符号 *************************************** ##20160819 26.5.4 改变表结果 ALTER TABLE 数据表名 更改1 [,更改2 …] #添加TELPHONE 字段 ALTER TABLE employees add TELPHONE char(20); #更改字段 change alter table employees change TELPHONE TEL char(20); ##更改字段 类型 modify alter table employees modify TEL varchar(20); ##删除 字段 drop alter table employees drop tel; #表改名 rename alter table employees rename to emp; 26.5.5 复制数据表 CREATE TABLE 新表名 LIKE 源表名 create table employees2 like employees; #只复制了表结构, 要复制结构和数据的 为 create table emp3 select * from emp; 26.5.6 删除数据表 DROP TABLE tablename; 26.6 数据管理 26.6.1查询数据 SELECT * | 字段列表 FROM 数据表 WHERE 条件; 1.所以数据 select * from emp; 2.某些字段的数据 mysql> select EMPLOYEE_ID, last_name,salary from emp;
+————-+————+——–+
| EMPLOYEE_ID | last_name | salary |
+————-+————+——–+
| kyct | kyct@g.com | 9 |
+————-+————+——–+

3,满足某些条件的数据
mysql> select EMPLOYEE_ID, last_name,salary from emp where salary < 10000; +————-+————+——–+ | EMPLOYEE_ID | last_name | salary | +————-+————+——–+ | kyct | kyct@g.com | 9 | +————-+————+——–+ 4.查询数据的总数 mysql> select count(*) from emp;
+———-+
| count(*) |
+———-+
| 1 |
+———-+

26.6.2 插入
INSERT INTO 表名(字段1, 字段2, …) VALUES (值1,值2,…);
INSERT INTO 表名(字段1, 字段2, …) SELECT 字段1, 字段2, …) FROM 源表;

mysql> desc emp;
+—————+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+—————+————-+——+—–+———+——-+
| EMPLOYEE_ID | varchar(10) | NO | PRI | NULL | |
| FIRST_NAME | varchar(10) | NO | | NULL | |
| LAST_NAME | varchar(10) | NO | | NULL | |
| EMALL | varchar(50) | NO | | NULL | |
| HIRE_DATE | date | YES | | NULL | |
| JOB_ID | int(11) | NO | | NULL | |
| SALARY | int(11) | YES | | 0 | |
| MANAGER_ID | int(11) | YES | | NULL | |
| DEPARTMENT_ID | int(11) | NO | | NULL | |
+—————+————-+——+—–+———+——-+

mysql> insert into emp values (‘kyct’,’kyct’,’kyct@g.com’,7,’2016-08-20′,3,9,8,9);

insert into emp (employee_id,LAST_NAME,job_id) values (10888,’jim’,5);

2. 插入其它有的数据
mysql> create table emp2 like emp;
Query OK, 0 rows affected (0.34 sec)

mysql> select * from emp2;

mysql> insert into emp2 select * from emp where employee_id=10888;
Query OK, 1 row affected, 1 warning (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 1

mysql> select * from emp2;
+————-+————+———–+——-+———–+——–+——–+————+—————+
| EMPLOYEE_ID | FIRST_NAME | LAST_NAME | EMALL | HIRE_DATE | JOB_ID | SALARY | MANAGER_ID | DEPARTMENT_ID |
+————-+————+———–+——-+———–+——–+——–+————+—————+
| 10888 | | jim | | NULL | 5 | 0 | NULL | 0 |
+————-+————+———–+——-+———–+——–+——–+————+—————+

26.6.3 更新数据
UPDATE 表名 SET 字段1 = 值1 [,字段2 = 值2 …] WHERE 查询条件;

mysql> select * from emp2;
+————-+————+———–+——-+———–+——–+——–+————+—————+
| EMPLOYEE_ID | FIRST_NAME | LAST_NAME | EMALL | HIRE_DATE | JOB_ID | SALARY | MANAGER_ID | DEPARTMENT_ID |
+————-+————+———–+——-+———–+——–+——–+————+—————+
| 10888 | | jim | | NULL | 5 | 0 | NULL | 0 |
+————-+————+———–+——-+———–+——–+——–+————+—————+

mysql> update emp2 set emall=’jim@gamil.com’,salary=2000 where last_name=’jim’;

mysql> select * from emp2;
+————-+————+———–+—————+———–+——–+——–+————+—————+
| EMPLOYEE_ID | FIRST_NAME | LAST_NAME | EMALL | HIRE_DATE | JOB_ID | SALARY | MANAGER_ID | DEPARTMENT_ID |
+————-+————+———–+—————+———–+——–+——–+————+—————+
| 10888 | | jim | jim@gamil.com | NULL | 5 | 2000 | NULL | 0 |
+————-+————+———–+—————+———–+——–+——–+————+—————+

26.6.4 删除数据
DELETE FROM 表名 WHERE 查询条件;
delete from emp where last_name=’jim’;

26.7 索引管理

26.7.1 创建索引
mysql> create table depar (
-> depa_id char(10) not null,
-> depa_name varchar(50) not null,
-> mana_id char(10),
-> index ind_depa01 (depa_id) //创建索引ind_depa01
-> );

#上面为创建表depar的同时,在 depa_id 字段创建一个名为 ind_depa01 的索引
如果表已存在 CREATE INDEX

CREATE [UNIQUE] INDEX 索引名 ON 表名 (字段1 [,字段2 …]);
create unique index ind_depa02 on dep(EMPLOYEE_ID);

#表emp 的 EMPLOYEE_ID 字段上,创建一个名为 ind_depa02 的唯一索引
create unique index ind_depa02 on emp(EMPLOYEE_ID);

26.7.2 删除索引
DROP INDEX 索引名 ON 表名

26.8 用户和权限管理

mysql> select host,user,password,select_priv from user;
+———–+——————+——————————————-+————-+
| host | user | password | select_priv |
+———–+——————+——————————————-+————-+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y |
| debian | root | *CB0AB6862555C52CBE5D736D089D8D56A468AE12 | Y |
| 127.0.0.1 | root | *CB0AB6862555C52CBE5D736D089D8D56A468AE12 | Y |
| ::1 | root | *CB0AB6862555C52CBE5D736D089D8D56A468AE12 | Y |
| localhost | debian-sys-maint | *E7BF66CEE2E00177E47E00EDE25DAFADF8AADF17 | Y |
+———–+——————+——————————————-+————-+

26.8.2 用户管理

1.添加
#add user 记得要刷新权限表
insert into user (host,user,password) values(‘%’,’test’,password(‘123456’));
flush privileges;

2.更新口令
mysql> update user set password=password(‘1234′) where user=’test’;
mysql> flush privileges;

delete from user where user=’test’;

26.8.3 用户授权

GRANT 权限[(字段)] ON 数据库名.表名 TO 用户名@域名或者ip 地址 [ IDENTIFIED BY ‘口令’ ] [ WITH GRANT OPTION
];

1.授权数据库中所有的对象的权限
hr库中所有的表的查询权限授给 evan
grant select on hr.* to evan;

2.授权数据库中个别对象的权限

#库hr中数据表emp 的查询和更新权限授给 test用户
mysql> grant select on hr.emp to test;

mysql> grant update on hr.emp to test;

3.控制访问的主机
grant all on dbname.tablename to user@’ip’;

4.
授test 用户 hr.emp 表的删除权限,并允许test 把该项权限授其它的用户
grant delete on hr.emp to test with grant option;

5 创建用户

grant select on evan.emp to sam identified by ‘123’;

mysql> select host,user,password from user;
+———–+——————+——————————————-+
| host | user | password |
+———–+——————+——————————————-+
| % | test | *A4B6157319038724E3560894F7F932C8886EBFCF |
| % | evan | |
| % | sam | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+———–+——————+——————————————-+
CREATE USER evan@localhost IDENTIFIED BY ‘1234’;

26.8.4 回收权限
REVOKE 权限 [( 字段)] ON dbname.tablename from user@ip

revoke select on hr.* from test;

mysql创建用户以及授权

mysql创建用户以及授权

mysql授权查看

mysql授权查看–tag

26.9 mysql 备份恢复 (5种 mysqldump,mysqlhocopy,sql,binlog,直接备份数据文件 )

  • 26.9.1 mysqldump

1. 导出指定的表,不指定将导出库中的所有表
mysqldump [options] dbname [table]

2.导出一个多个指定数据库中的所有表
mysqldump [options] –database dbname1 [dbname2,…]

3.导出系统中所有数据库
mysqldump [options] –all-databases

常用的选项
–databases,-B 指定要导出的库
-default-character-set=charset_name 默认字符集
–ignore-table=dbname.tablename #忽略的表,不导出
–lock-all-tables, -X 导出前,锁定所以的数据表,保持系统数据的一致
–lock-tables, -l 锁定当前导出的数据表 #这个用处应该比较多
–log-error=filnename 保存错误和警告日志到文件
–no-create-db, -n 只导出数据,不导出CREATE TABLE 语句
–no-data, -d 只导出表结构,不导出数据
–routines, -R 导出存储过程和函数

1.备份表
mysqldump -uroot -p dbname table >table.sql

2.整个库
mysqldump -uroot -p –database dbname > db.sql

3.只导出表结构
mysqldump -uroot -p –no-data dbname table >table.sql

4.恢复数据
mysql -uroot -p dbanne < file.sql
或者 source

****************************************************************

  • 26.9.2 mysqlhotcopy 感觉不好用
    其实是使用lock tables cp scp 来完成备份的 只能备份myisam存储引擎

1.备份

2.恢复 直接是 cp -Rf src targer

  • 26.9.3 使用SQL语句备份和恢复

BACKUP TABLE ,SELECT NITO OUTFILE

  • 26.9.4 二进制日志(binlog)

恢复
mysqlbinlog -d games_s25 --start-datetime="2016-07-25 02:05:00" --stop-datetime="2016-07-25 04:40:00" "mysql-bin.000201" | mysql -uroot -ppassword

  • 26.9.5 直接备份数据文件 ,flush tablename with read lock;#会比较 好

MySQL基本操作

http://dufei.blog.51cto.com/382644/88646

mysqlcheck mysql检查和修复

Mysqlcheck

Mysqlcheck在mysqld运行时使用,其内嵌check/repair/analyze/optimize table命令;
在执行时相应表被锁定,analyze/check table使用读锁,其它均为写锁;
同myisamchk功能近似,但是后者最好在mysqld关闭时运行;

1. Check a Specific Table in a Database
If your application gives an error message saying that a specific table is corrupted, execute the mysqlcheck command to check that one table.
The following example checks employee table in thegeekstuff database.
# mysqlcheck -c thegeekstuff employee -u root -p

2. Check All Tables in a Database
To check all the tables in a particular database, don’t specify the table name. Just specify the database name.
The following example checks all the tables in the alfresco database.
shell> mysqlcheck -c alfresco -u root -p

3. Check All Tables and All Databases
To check all the tables and all the databases use the “–all-databases” along with -c option as shown below.
# mysqlcheck -c -u root -p –all-databases

If you want to check all tables of few databases, specify the database names using “–databases”.
The following example checks all the tables in thegeekstuff and alfresco database.
# mysqlcheck -c -u root -p –databases thegeekstuff alfresco

Repair Tables using Mysqlcheck
The following repairs employee table that is located in thegeekstuff database.
# mysqlcheck -r thegeekstuff employee -u root -p

Additional Useful Mysqlcheck Options

The following are some of the key options that you can use along with mysqlcheck.

-A, –all-databases Consider all the databases
-a, –analyze Analyze tables
-1, –all-in-1 Use one query per database with tables listed in a comma separated way
–auto-repair Repair the table automatically it if is corrupted
-c, –check Check table errors
-C, –check-only-changed Check tables that are changed since last check
-g, –check-upgrade Check for version dependent changes in the tables
-B, –databases Check more than one databases
-F, –fast Check tables that are not closed properly
–fix-db-names Fix DB names
–fix-table-names Fix table names
-f, –force Continue even when there is an error
-e, –extended Perform extended check on a table. This will take a long time to execute.
-m, –medium-check Faster than extended check option, but does most checks
-o, –optimize Optimize tables
-q, –quick Faster than medium check option
-r, –repair Fix the table corruption

可以在表和数据库级别执行
Mysqlcheck db_name [tbl_name …]
Mysqlcheck –databases db_name
Mysqlcheck –all-databases

选项
–analyze:执行analyze table
–auto-repair:如果表损坏则自动修复
–check:执行check table
–check-only-changed:只对上次操作以来变化过的表执行check table
–check-upgrade:执行check table for upgrade
–compress:压缩服务器和客户端之间的所有通信信息
–extended:检查并修复表;如果用于检查表,会确保100%一致但耗时较长;如果用于修复表,可能会产生垃圾数据;
–fast:只检查没有正常关闭的表
–medium-check:比extended选项稍快,可检查99.99%的错误
–optimize:执行optimize table
–quick:只修复索引树,是最快的方法
–repair:除了unique key包含重复数据,可以修复其它大部分错误
–use-frm:修复MyISAM表
–write-binlog:将analyze/optimize/repair语句记录进binlog

Analyze table
要求对候选表有select和insert权限;
可用于分区表,alter table … analyze partition
用于分析表中key键的分布情况,即收集统计信息;
如果自上次analyze以来表没有改动,则analyze table并不会被实际执行;
如果不想记录binlog,可使用NO_WRITE_TO_BINLOG或LOCAL

Check table
可用于MyISAM/InnoDB,该命令有一系列选项,包括
For upgrade/quick/fast/medium/extened/changed
对于MyISMA默认为medium,等同于Myisamchk –m tbl_name
表损坏经常来自索引,故所有的检查级别都会完整的检查索引;
可用于分区表,alter table … check partition

恢复例子

第一,常用的 check 命令
mysqlcheck -c -A -uroot -ppassword
mysqlcheck -c -uroot -ppassword --all-databases
mysqlcheck -c --database dbname -uroot -p
mysqlcheck -c -u root -ppassword --all-databases
mysqlcheck -r table # myisam表才可以

第二 恢复
1.首先 导入当天的冷备份 那就回到当然冷备的时候 一般是凌晨3点什么的
2. 查看系统当机时间   –start-datetime 冷备开始时间 ; –stop-datetime 系统当机时间 , mysql-bin.000201 binlog文件 这个也要看对应时间
mysqlbinlog -d games_s25 --start-datetime="2016-07-25 02:05:00" --stop-datetime="2016-07-25 04:40:00" "mysql-bin.000201" | mysql -uroot -ppassword

from http://www.thegeekstuff.com/2011/12/mysqlcheck/

利用mysqlcheck命令快速修复mysql数据库
http://blog.csdn.net/adparking/article/details/6388917

mysqlcheck和myisamchk
http://blog.itpub.net/15480802/viewspace-757890

mysqlbinlog 恢复数据的四种方法

mysql 使用mysqldump 导出数据库时,如何忽略指定表的数据

mysql 使用mysqldump 导出数据库时,如何忽略指定表的数据

我想忽略这几个表的数据,但是表结构还是要,如果不多次导出,那该如何实现呢?

首先导出表结构:
mysqldump -uxxx -p –no-data db_name > test.sql
然后导出你要的数据:
mysqldump -uxxx -p dbname --ignore-table=test.1 --ignore-table=test.2 ...>>test.sql;