MySQL相关命令使用

 
mysqladmin
 
例:几个常用功能
使用ping检测MySQL Server是否正常提供服务:
[root@server ~]# mysqladmin -uroot -pabc123 -h localhost ping
mysqld is alive
 
status命令获取当前MySQL Server几个基本状态值:
[root@server ~]# mysqladmin -uroot -pabc123 -h localhost status
Uptime: 201960  Threads: 1  Questions: 754  Slow queries: 0  Opens: 385  Flush tables: 1  Open tables: 64  Queries per second avg: 0.004
 
processlist获取当前数据库的连接线程信息:
[root@server ~]# mysqladmin -uroot -pabc123 -h localhost processlist
+----+------+-----------+----+---------+------+-------+------------------+
| Id | User | Host      | db | Command | Time | State | Info             |
+----+------+-----------+----+---------+------+-------+------------------+
| 9  | root | localhost |    | Query   | 0    |       | show processlist |
+----+------+-----------+----+---------+------+-------+------------------+
 
mysqldump
功能将MySQL Server中数据以SQL语句的形式从数据库中dump成文本文件。所生成的文件全部是SQL语句,包括数据库和表的创建语句。
参数:
-T 生成非SQL形式指定文本文件
-d,--no-data 仅生成结构创建的语句
--default-character-set=name 指定字符集内容,防止以错误的字符集生成不可用的内容。
 
例:备份数据库test
[root@server ~]# mysqldump -uroot -pabc123 test > backup.sql
 
mysqlimport
将以特定格式的存放的文本数据导入到指定MySQL Server中的工具。
-d 新导入数据前删除表中所有信息
-f 强制继续插入数据
-l 数据被插入之前锁住表
--fields-terminated- by=char 指定分隔字符,默认是tab
--fields-enclosed- by= char 指定文本文件中数据的记录时以什么括起的, 很多情况下数据以双引号括起。 默认的情况下数据是没有被字符括起的。
 
例:将以下emp文件导入到test数据库下面的emp表中
[root@server ~]# cat /var/lib/mysql/test/emp.txt 
lisa,2003-01-01,3000,1
dony,2002-03-01,2000,2
zzx,2002-03-05,3500,1
 
[root@server ~]# mysqlimport -uroot -pabc123 --fields-terminated-by=, test emp.txt
test.emp: Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
 
mysql> select * from emp;
+-------+------------+---------+--------+
| ename | hiredate   | sal     | deptno |
+-------+------------+---------+--------+
| lisa  | 2003-01-01 | 3000.00 |      1 | 
| dony  | 2002-03-01 | 2000.00 |      2 | 
| zzx   | 2002-03-05 | 3500.00 |      1 | 
+-------+------------+---------+--------+
3 rows in set (0.00 sec)
 
格式:mysqlimport database text
说明:文本文件的数据格式必须与表中的记录格式一致
 
mysqlbinlog
分析MySQL Server所产生的二进制日志,可以进行数据恢复。可以解析binlog中指定时间段或指定日志起始和结束位置内容解析成SQL、语句,并导出到指定文件中,在解析过程中,还可以通过指定数据库名称来过滤输出内容。
参数:
--stop-date 指定恢复时间,恢复截止到在--stop-date选项中以DATETIME格式给出的日期和时间的所有数据。
--start-position和--stop-position 指定日志位置,使用日志位置是更准确的恢复方法,特别是当由于破坏性SQL语句同时发生许多事务的时候。
 
例:删除test数据库下的emp表,再通过mysqlbinlog恢复
1.开启二进制日志,在/etc/my.cnf加入
log_bin=/var/lib/mysql/mysql-bin.log
binlog-do-db=test
 
2.删除emp表
mysql> drop table emp;
Query OK, 0 rows affected (0.00 sec)
 
3.恢复删除的emp表
[root@server ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000001
#120409 12:24:43 server id 1  end_log_pos 573   Query   thread_id=5     exec_time=0     error_code=0
SET TIMESTAMP=1333945483/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
drop table emp
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
可以看到120409 12:24:43删除时间
 
[root@server ~]# mysqlbinlog --stop-date="2012-04-09 12:24:40" /var/lib/mysql/mysql-bin.000001 |mysql -uroot -pabc123
指定恢复时间截止在2012-04-09 12:24:40,也就是被删除之前
 
查看是否恢复
[root@server ~]# mysql -uroot -pabc123 -e "use test;select * from emp;"
+-------+------------+---------+--------+
| ename | hiredate   | sal     | deptno |
+-------+------------+---------+--------+
| lisa  | 2003-01-01 | 3000.00 |      1 | 
| dony  | 2002-03-01 | 2000.00 |      2 | 
| zzx   | 2002-03-05 | 3500.00 |      1 | 
+-------+------------+---------+--------+
 
mysqlcheck
使用:mysqlcheck [OPTIONS] database [tables]
可以检查check,修复repair,分析analyze和优化optimize MySQL Server中的表,但并不是所有的存储引擎都支持这里所有四个功能,像Innodb不支持修复功能。
 
myisamchk
使用:myisamchk [OPTIONS] tables[.MYI]
类似“mysqlcheck -c/-r”对检查和修复MyISAM存储引擎的表。
 
myisampack
使用:myisampack [OPTIONS] filename...
对MyISAM表进行压缩处理,以缩减占用存储空间,主要用在归档备份,压缩后的表变为只读,不能进行任何修改。
 
mysqlhotcopy
使用:mysqlhotcopydb_name[./table_regex/][new_db_name|directory]
对MySQL中的MyISAM存储引擎的表进行在线备份操作,其备份操作实际上就是通过对数据库的表进行加锁,然后复制其结构,数据和索引文件来完成备份操作。
 
例:使用mysqlhotcopy备份test数据库
[root@server ~]# mysqlhotcopy -u root -p abc123 test /backup/
Locked 1 tables in 0 seconds.
Flushed tables (`test`.`emp`) in 0 seconds.
Copying 4 files...
Copying indices for 0 files...
Unlocked tables.
mysqlhotcopy copied 1 tables (4 files) in 0 seconds (0 seconds overall).
 
恢复时,只需要使用cp覆盖原数据