mysql如何存储MP3格式?最好是直接在后台用sql操作,谢谢你的爱方言版mp3!

fuquanjun1013 的BLOG
用户名:fuquanjun1013
文章数:268
评论数:42
访问量:100116
注册日期:
阅读量:5863
阅读量:12276
阅读量:347897
阅读量:1047483
51CTO推荐博文
Mysql 忘记root密码方法一:在/etc/my.cfg [mysqld]下面添加skip-grant-tables&&&& 或是skip-grant重启MySQLUPDATE&user&SET&Password&=&password&(&'new-password'&)&WHERE&User&=&'root'&;mysql&flush&将my.cfg文件修改回来 ,重启MySQL即可。方法二:在启动Mysql服务器时加上参数--skip-grant-tables来跳过授权表的验证(./safe_mysqld --skip-grant-tables &),这样我们就可以直接登陆Mysql服务器,然后再修改root用户的口令,重启Mysql就可以用新口令登陆了。不登陆数据库执行mysql命令小结1.通过echo实现(这个比较常见)echo "" | mysql -uroot -p'123456' -S /data/3308/mysql.sock2.通过cat实现(此法用的不多,适合多行字符串比较多的时候)cat |mysql -uroot -p'123456' -S /data/3308/mysql.sock && EOFEOF3.通过mysql -e参数实现mysql -u root -p'123456' -S /data1/3307/mysql.sock -e ""特殊生产场景应用:例一:mysql自动批量制作主从同步需要的语句。cat |mysql -uroot -p'oldboy' -S /data/3308/mysql.sock&& EOF&CHANGE MASTER TO &&MASTER_HOST='10.0.0.16',&&MASTER_PORT=3306,&MASTER_USER='oldboyrep',&&MASTER_PASSWORD='oldboyrep',&&MASTER_LOG_FILE='mysql-bin.000025'&MASTER_LOG_POS=4269;&EOF例二:mysql线程中,“大海捞针”平时登陆数据库,发现结果超长,找自己要看的的比较困难,而且,SQL显示不全。如果直接执行show full processlist那更是瞬间滚了N屏。找到有问题的SQL语句非常困难,现在通过如下语句过滤当前执行的SQL语句完整内容,后面还可以加iconv等对中文转码。根据需求过滤想要的内容,此命令屡试不爽啊。mysql -u root -p'oldboy' -S /data1/3307/mysql.sock -e "s"|grep -v Sleep添加环境变量export PATH=/usr/local/mysql/bin:$PATH& 加入到/etc/profile.d/mysql.sh中只需本机使用Mysql服务在启动时还可以加上--skip-networking参数使Mysql不监听任何TCP/IP连接(./safe_mysqld --skip-networking &),增加安全性。查看支持的存储引擎mysql&&show&
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
|&Engine&&&&&&&&&&&&&|&Support&|&Comment&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|&Transactions&|&XA&&&|&Savepoints&|
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
|&MyISAM&&&&&&&&&&&&&|&YES&&&&&|&MyISAM&storage&engine&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|&NO&&&&&&&&&&&|&NO&&&|&NO&&&&&&&&&|
|&CSV&&&&&&&&&&&&&&&&|&YES&&&&&|&CSV&storage&engine&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|&NO&&&&&&&&&&&|&NO&&&|&NO&&&&&&&&&|
|&MRG_MYISAM&&&&&&&&&|&YES&&&&&|&Collection&of&identical&MyISAM&tables&&&&&&&&&&&&&&&&&&&&&&&&&&|&NO&&&&&&&&&&&|&NO&&&|&NO&&&&&&&&&|
|&BLACKHOLE&&&&&&&&&&|&YES&&&&&|&/dev/null&storage&engine&(anything&you&write&to&it&disappears)&|&NO&&&&&&&&&&&|&NO&&&|&NO&&&&&&&&&|
|&MEMORY&&&&&&&&&&&&&|&YES&&&&&|&Hash&based,&stored&in&memory,&useful&for&temporary&tables&&&&&&|&NO&&&&&&&&&&&|&NO&&&|&NO&&&&&&&&&|
|&FEDERATED&&&&&&&&&&|&NO&&&&&&|&Federated&MySQL&storage&engine&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|&NULL&&&&&&&&&|&NULL&|&NULL&&&&&&&|
|&ARCHIVE&&&&&&&&&&&&|&YES&&&&&|&Archive&storage&engine&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|&NO&&&&&&&&&&&|&NO&&&|&NO&&&&&&&&&|
|&PERFORMANCE_SCHEMA&|&YES&&&&&|&Performance&Schema&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|&NO&&&&&&&&&&&|&NO&&&|&NO&&&&&&&&&|
|&InnoDB&&&&&&&&&&&&&|&DEFAULT&|&Supports&transactions,&row-level&locking,&and&foreign&keys&&&&&|&YES&&&&&&&&&&|&YES&&|&YES&&&&&&&&|
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9&rows&in&set&(0.01&sec)查看当前MySQL的默认数据引擎mysql&&show&variables&like&'%engine%';
+---------------------------+--------+
|&Variable_name&&&&&&&&&&&&&|&Value&&|
+---------------------------+--------+
|&default_storage_engine&&&&|&InnoDB&|
|&engine_condition_pushdown&|&ON&&&&&|
|&storage_engine&&&&&&&&&&&&|&InnoDB&|
+---------------------------+--------+
3&rows&in&set&(0.00&sec)
mysql&&show&&&&查看相关参数查看和修改最大连接数使用MySQL&数据库的站点,当访问连接数过多时,就会出现&"Too&many&connections"&的错误。出现这种错误有两种情况:一种是网站访问量实在太大,服务器已经负担不起,此时就应该考虑负载均衡或者其它减少服务器压力的办法。另一种情况就是&MySQL最大连接数设置得太小,当访问量稍大就出现连接过多的错误。& show variables like '%max_connections%';要对&mysql最大连接数进行修改,只需要在my.cnf&配置文件里面修改max_connections的值,然后重启mysql就行。如果my.cnf 文件中没有找到&max_connections&条目,可自行添加以下条目。max_connections = 220&或是mysql&set global max_user_connections = 200; [仅本次修改有效]实时查看mysql当前连接数前提:对用户和远程主机有授权mysql& grant all on *.* to root@192.168.9.9 identified by '123456';mysql&[root@test ~]# mysqladmin -uroot -p -h192.168.9.9&只查看当前连接数(Threads就是连接数)[root@OceanV ~]# mysqladmin -uroot -p123456Uptime:
4449& Threads: 2& Questions: 18697& Slow queries: 0& Opens: 77& Flush
tables: 1& Open tables: 31& Queries per second avg: 4.202mysql& s&& 或者查看一下所有连接进程,注意查看进程等待时间以及所处状态&是否locked如果进程过多,就把进程打印下来,然后查看.mysql -e 's' -p & 111.txt查找非locked的进程,一般就是当前执行中卡死,导致后面的进程排队的原因。查看MySQL连接数和当前用户Mysql连接数先用管理员身份进入mysql提示符。mysql&-uroot&-pxxxxmysql&&show&&&&&& && #可以显示前100条连接信息mysql &show&full&&&& #可以显示全部。如果用普通账号登录,就只显示这用户的。修改MySQL监听端口&1.如果安装的是系统自带的rpm包的情况: &修改 /f &[mysqld] &datadir=/var/lib/mysql &port=3300& && && && && && &&&#修改成你自己想要的端口 &socket=/var/lib/mysql/mysql.sock &[mysql.server] &user=mysql &basedir=/var/lib &[safe_mysqld] &err-log=/var/log/mysqld.log &pid-file=/var/run/mysqld/mysqld.pid2.如果安装的是源码包或者在同一服务器上安装多个mysqld服务情况: &找出my.cnf 文件。添加port= 端口号 &需要注意的是 &[client] &port& && && && &= 3300 &这里也要改一下。在同一台机器上配置两个MySQL服务(跑两个端口)cd /usr/local/cp -r mysql mysql_2cd mysql_2;初始化mysql2./scripts/mysql_install_db --user=mysql --datadir=/data/mysql2& &拷贝配置文件:cp /f ./my.cnf 修改配置文件相关参数:f&&#更改port 以及socket启动:/usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_f --user=mysql & 若开机启动它,需加入到 /etc/rc.local中查看mysql服务器当前版本, 当前日期, 当前用户, mysql状态, 当前数据库mysql& select version();mysql& select current_date();mysql& select user();mysql&mysql& select database();&查看服务器基本信息mysql&&\s
mysql&Distrib&5.5.34,&for&Linux&(x86_64)&
Connection&id:&&&&&&&&&&141700
Current&database:&&&&&&&lab
Current&user:&&&&&&&&&&&root@localhost
SSL:&&&&&&&&&&&&&&&&&&&&Not&in&use
Current&pager:&&&&&&&&&&stdout
Using&outfile:&&&&&&&&&&''
Using&delimiter:&&&&&&&&;
Server&version:&&&&&&&&&5.5.34-log&Source&distribution
Protocol&version:&&&&&&&10
Connection:&&&&&&&&&&&&&Localhost&via&UNIX&socket
Server&characterset:&&&&latin1
Db&&&&&characterset:&&&&latin1
Client&characterset:&&&&latin1
Conn.&&characterset:&&&&latin1
UNIX&socket:&&&&&&&&&&&&/tmp/mysql.sock
Uptime:&&&&&&&&&&&&&&&&&47&days&4&hours&54&min&1&sec
Threads:&4&&Questions:&&&Slow&queries:&1&&Opens:&283512&&Flush&tables:&23&&Open&tables:&46&&Queries&per&second&avg:&46.447常用字符集:atin英文,big5繁体中文,GB2312中文,UTF8通用语言Mysql对于字符集的支持细化到四个层次:服务器(server);数据库(database);数据表(table)(字段column);连接(connection);从上面可以看到四种默认字符集是latin1,修改四种默认字符集,client和connection两个要是一样的。方法一:set character_set_server=utf8;&&& ##修改服务器默认字符集set character_set_database=utf8;&&& ##修改数据库字符集set character_set_client=utf8;&&& ##修改数据库客户端字符集set character_set_connection=utf8;&& ##修改连接默认字符集方法二:修改my.cnf默认字符集,重启mysql才会生效[mysqld]character_set_server=utf8[mysql]default-character-set=utf8&2.查看创建数据库时使用的字符集show &3.修改已经存在库的字符集3.1修改存在数据库的字符集alter database mydb character set utf-8;3.2修改存在表的字符集alter table mytable default character set utf83.3修改存在表字段字符集alter table mytable change old_column new_column varchar(255) character set utf8;&&&修改mysql参数mysql& show variables like 'max_connect%';mysql& set global max_connect_errors = 1000;开启服务器  /etc/rc.d/init.d/mysqld&start& 或者&& mysqld_safe&&--user=mysql&&停止服务器/etc/rc.d/init.d/mysqld&stop& 或者&& /usr/bin/mysqladmin&-u&root&-p&shutdown更改MySQL目录MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步:1、home目录下建立data目录mkdir /home/data2、把MySQL服务进程停掉:mysqladmin&-u&root&-p&shutdown3、把/var/lib/mysql整个目录移到/home/datamv&/var/lib/mysql /home/data/这样就把MySQL的数据文件移动到了/home/data/mysql下4、找到my.cnf配置文件如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf中。命令如下:[root@test1&mysql]#&cp&/usr/share/mysql/f /f5、编辑MySQL的配置文件/f为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。&修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock&。操作如下:vim /f#&The&MySQL&server[mysqld]port   =&3306#socket &=&/var/lib/mysql/mysql.sock(原内容,为了更稳妥用#注释此行)socket &=&/home/data/mysql/mysql.sock   (加上此行)6、修改MySQL启动脚本/etc/rc.d/init.d/mysql修改MySQL启动脚本/etc/rc.d/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:/home/data/mysql。[root@test1&etc]#&vi /etc/rc.d/init.d/mysql#datadir=/var/lib/mysql    (注释此行)datadir=/home/data/mysql  && (加上此行)7、重新启动MySQL服务/etc/rc.d/init.d/mysql restart如果工作正常移动就成功了,否则对照前面的7步再检查一下。赋权  myaql &grant all on dbname.*&to&username@% identified&by&'password';mysql &flush&刷新权限表 例如:增加用户user1密码为password1,让其可以在本机上登录, 对所有数据库有查询、插入、修改、删除权限,首先使用root用户登录mysqlmysql& grant select,insert,update,delete on *.* to&&Identified by "password1";&如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。&如果你不想user1有密码,可以再打一个命令将密码去掉。mysql& grant select,insert,update,delete on mydb.* to&&identified by "";&mysql& grant all privileges on wpj1105.* to&&identified by '123'; ###all privileges 所有权限&&创建数据库#判断是否存在数据库class,有的话先删除,注意数据库名不能以数字开头。mysql& select database();&&& ##查看当前数据库mysql& create databasemysql& show databases class\G; & ##查看建库语句*************************** 1. row ***************************& & & &Database: mysqlCreate Database: CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET latin1 */mysql& create database if not exists class character set&charset_name collate collation_name;mysql& drop data&创建表mysql&mysql& drop tabmysql& create table student(id int auto_increment primary key,name varchar(50),sex varchar(20),date varchar(50),content varchar(100))default charset=utf8;或者是mysql&mysql&mysql&&& 或者show create&mysql&mysql&&create&table if&not exits&student (id int auto_increment primary key,name varchar(50),sex varchar(20),date varchar(50),content varchar(100))default charset=utf8;mysql& rename table user_node_log to user_node_log_&&& ###更改表名&&mysql支持全文索引Linux服务器为my.cnf,在 [mysqld] 下面加入一行“ft_min_word_len=1”,然后重启MysqlWindows 服务器为my.ini,修改方法相同,修改完成之后,大家在程序中就可以使用全文索引了。查看表的状态信息mysql&&show&table&status&like&'game_userlog'\G
***************************&1.&row&***************************
&&&&&&&&&&&Name:&game_userlog_temp
&&&&&&&&&Engine:&InnoDB
&&&&&&&&Version:&10
&&&&&Row_format:&Compact
&&&&&&&&&&&Rows:&9777636
&Avg_row_length:&259
&&&&Data_length:&
Max_data_length:&0
&&&Index_length:&
&&&&&&Data_free:&
&Auto_increment:&
&&&&Create_time:&&10:22:47
&&&&Update_time:&NULL
&&&&&Check_time:&NULL
&&&&&&Collation:&utf8_general_ci
&&&&&&&Checksum:&NULL
&Create_options:&row_format=DYNAMIC
&&&&&&&&Comment:&??????????
1&row&in&set&(0.26&sec)查看表所有的列:mysql& SHOW FULL COLUMNS优化表 mysql&mysql& mysql& optimize table users,或者进行优化并检查修复任务[root@test ~]# mysqlcheck -o dbname tblA&tblB&&tblC -u&root -p对表进行分析  mysql&mysql& analyze table tblA;或[root@test ~]# mysqlcheck -a&dbname&[tblA&&tblB&tblC&]&-u&root&-p对表进行检查 mysql&mysql&&将一张表的数据插入到另一张表中(二张表结构相同)insert into game_userlog_temp select * from game_&复制表的数据(包括表结构)create table game_userlog_temp (select * from game_userlog);查询一张表的最后一条数据记录SELECT * from game_log_bak order by RoundID desc LIMIT 1;&复制表结构&create&table a like&&更改表存储引擎alter table tt7 engine=MySQL中将字符串aaa批量替换为bbb的SQL语句UPDATE&表名&SET&字段名&=&REPLACE&(字段名,&'aaa',&'bbb');&#插入数据insert into student values(null,'aa','男','','......');insert into student values(null,'bb','女','','......');insert into student values(null,'cc','男','','......');insert into student values(null,'dd','女','','......');insert into student values(null,'ee','女','','......');insert into student values(null,'ff','null','','......');#查询表中的数据select *select id,#修改某一条数据update student set sex='男' where id=4;#删除数据delete from student where id=5;# and 且select * from student where date&'' and date&'';# or 或select * from student where date&'' or date&'';&&&#betweenselect * from student where date between '' and '';#in 查询制定集合内的数据select * from student where id in (1,3,5);#排序 asc 升序&& desc 降序select * from stu#分组查询 #聚合函数&select max(id),name,sex from select min(date)select avg(id) as '求平均'select count(*)&& #统计表中总数select count(sex)&& #统计表中性别总数& 若有一条数据中sex为空的话,就不予以统计#查询第i条以后到第j条的数据(不包括第i条)select * from student limit 2,5;& #显示3-5条数据#巩固练习create table c(&id int primary key auto_increment,&name varchar(10) not null,&sex varchar(50) ,& #DEFAULT '男' ,&age int unsigned, #不能为负值(如为负值 则默认为0)&sno int unique&&& #不可重复);insert into c (id,name,sex,age,sno) values (null,'涛哥','男',68,1);insert into c (id,name,sex,age,sno) values (null,'aa','男',68,2);insert into c (id,name,sex,age,sno) values (null,'平平','男',35,3);select *#修改数据&update c set age=66 where id=2;update c set name='花花',age=21,sex='女' where id=2delete from c where age=21;#常用查询语句select name,age ,id from cselect * from c where age&40 and age&60;& #andselect * from c where age&40 or age&60;&&#orselect * from c where age between 40 and 60&#betweenselect * from c where age in (30,48,68,99);&&&& #in 查询指定集合内的数据select * from&& && #order by (asc升序 des降序)#分组查询select name,max(age)& #按性别分组查年龄最大值#聚合函数select min(age)select avg(age) as '平均年龄 'select count(*)& #统计表中数据总数select sum(age)#修改表的名字#格式:alter table tbl_name rename to new_namealter&#表结构修改create table test(id int not null auto_increment primary key, #设定主键name varchar(20) not null default 'NoName', #设定默认值department_id int not null,position_id int not null,unique (department_id,position_id) #设定唯一值);#修改表的名字#格式:alter table tbl_name rename to new_namealter table test rename to test_#向表中增加一个字段(列)#格式:alter table tablename/alter table tablename add(columnname type);alter table test add& columnname varchar(20);#修改表中某个字段的名字alter table tablename change columnnam& #修改一个表的字段名alter table test change name uname varchar(50);select *#表position 增加列testalter table position add(test char(10));#表position 修改列testalter table position modify test char(20)#表position 修改列test 默认值alter table position alter test set default 'system';#表position 去掉test 默认值alter table position alt#表position 去掉列testalter table posit#表depart_pos 删除主键alter table depart_#表depart_pos 增加主键alter table depart_pos add primary key PK_depart_pos(department_id,position_id);#用文本方式将数据装入数据库表中(例如D:/mysql.txt)load data local infile "D:/mysql.txt" into table MYTABLE;#导入.sql文件命令(例如D:/mysql.sql)mysql& source d:/mysql.&&创建表字段索引1.主键索引&创建一个主键索引,一般创建表时已经设置&alter table user add primary key(id);&删除一个主键索引&alter table u2.普通索引&创建一个普通索引&alter table user add index index_name(name);&删除一个普通索引&alter table user drop index index_&查看主键索引和普通索引&&注:修改字段名不影响索引。3.查看表中创建的索引mysql&&desc&user2;
+-------+------------------+------+-----+---------+----------------+
|&Field&|&Type&&&&&&&&&&&&&&&|&Null&&&&|&Key&|&Default&|&Extra&&&&&&&&&&|
+-------+------------------+------+-----+---------+----------------+
|&id&&&&|&int(10)&unsigned&&&|&NO&&&&&&|&PRI&|&NULL&&&&|&auto_increment&|
|&name&&|&varchar(30)&&&&&&&&|&YES&&&&&|&MUL&|&NULL&&&&|&&&&&&&&&&&&&&&&|
|&pass&&|&varchar(30)&&&&&&&&|&YES&&&&&|&&&&&|&NULL&&&&|&&&&&&&&&&&&&&&&|&上面key中的PRI代表是主键索引,MUL代表是普通索引。4.查看索引信息mysql&&show&index&from&user2;
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+
|&Table&|&Non_unique&|&Key_name&&&|&Seq_in_index&|&Column_name&|&Collation&|&Cardinality&|&Sub_part&|&Packed&|&Null&|&Index_type&|&Comment&|&Index_comment&|
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+
|&user2&|&&&&&&&&&&0&|&PRIMARY&&&&|&&&&&&&&&&&&1&|&id&&&&&&&&&&|&A&&&&&&&&&|&&&&&&&&&&&1&|&&&&&NULL&|&NULL&&&|&&&&&&|&BTREE&&&&&&|&&&&&&&&&|&&&&&&&&&&&&&&&|
|&user2&|&&&&&&&&&&1&|&index_name&|&&&&&&&&&&&&1&|&name&&&&&&&&|&A&&&&&&&&&|&&&&&&&&&&&1&|&&&&&NULL&|&NULL&&&|&YES&&|&BTREE&&&&&&|&&&&&&&&&|&&&&&&&&&&&&&&&|
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+&5.测试是否使用索引mysql&&desc&select&id,name&from&user2&where&name='zhangsan';
+----+-------------+-------+------+---------------+------------+---------+-------+------+--------------------------+
|&id&|&select_type&|&table&|&type&|&possible_keys&|&key&&&&&&&&|&key_len&|&ref&&&|&rows&|&Extra&&&&&&&&&&&&&&&&&&&&|
+----+-------------+-------+------+---------------+------------+---------+-------+------+--------------------------+
|&&1&|&SIMPLE&&&&&&|&user2&|&ref&&|&index_name&&&&|&index_name&|&33&&&&&&|&const&|&&&&1&|&Using&&Using&index&|
+----+-------------+-------+------+---------------+------------+---------+-------+------+--------------------------+&用desc检测语句,可以看到查询一条张三的记录,使用了普通索引index_name这个名字,检索了一行(rows)就找到了这条记录。&&从mysqldump文件中恢复一张表可以先到原数据库中使用"" &查看数据库表列表,注意,此列表已经按照字母排序 比如,table1table2table3然后使用awk来过滤sql语句,假设你要恢复table2 表,可以使用下面的语句#&awk&'/^--&Table&structure&for&table&.table2./,/^--&Table&structure&for&table&.table3./{print}'&qqtexas.sql&&&/tmp/recovered_table.sql从一个多数据库备份中提取一个数据库备份(假设数据库名字是 test)#&sed&-n&'/^--&Current&Database:&`test`/,/^--&Current&Database:&`/p'&fulldump.sql&&&/tmp/test.sqlMySQL binlog 查看信息1)按时间筛选mysqlbinlog --start-datetime=" 0:20:00" --stop-datetim=" 01:25:00" & xxx_db-bin.000001&2)按位置删选mysqlbinlog --start-position=134 --stop-position=330 mysqlbin-log.000001&从mysqldump备份的文件中提取表结构或数据#!/bin/bash
while&getopts&lf:dst:h&ACT
&&&&case&$ACT&in
&&&&&&&l)&LTBL="Y";;
&&&&&&&f)&FLE=$OPTARG;;
&&&&&&&t)&TBL=$OPTARG;;
&&&&&&&d)&TBLD="Y";;
&&&&&&&s)&TBLS="Y";;
######OPTIONS&-h&---&help
&&echo&"USAGE:`basename&$0`&-f&dumpfile&[-lds][-t&tablename]"
&&echo&"&-f&dumpfile&&&&&Dump&file(with&mysqldump)"
&&echo&"&-l&&&&&&&&&&&&&&List&all&tables&in&dumpfile"
&&echo&"&-t&tablename&&&&Table&Name(\"&-t&1&\"&list&all&table&name,\"&-t&2&\"list&all&table&structure)"
&&echo&"&-s&&&&&&&&&&&&&&Export&table&structure"
&&echo&"&-d&&&&&&&&&&&&&&Export&table&data"
&&echo&"&-h&&&&&&&&&&&&&&Help,this&massage"
&&echo&"&MySQL(5.0|5.1)&&mysqldump&file&splitor&V1.0.11,BUG&report&to&"
if&[&${#}&-lt&3&-o&"$1"&=&"-h"&];then
########OPTION&-l&---List&All&Tables
if&[&"$LTBL"&=&"Y"&];then
&awk&'/^CREATE&TABLE/{print&$3}'&$FLE|sed&-e&'s/`//gi'|nl
########OPTION&-t
if&[&"X$TBL"&!=&"X"&];then
&&&if&[&"$TBL"&=&"1"&];then
&&&&&&&awk&'/^CREATE&TABLE.+/{print&$3}'&$FLE|nl
&&&&&&&exit
&&&&elif&[&"$TBL"&=&"2"&];then
&&&&&&awk&'/^CREATE&TABLE.+/,/ENGINE=/{print&$0}'&$FLE
########OPTION&-s
&&if&[&"$TBLS"&=&"Y"&];then
&&&&CMDSTR="awk&'/^CREATE&TABLE&\`$TBL\`[(&)|\(]+.+/,/ENGINE=/{print&\$0}'&$FLE"
&&&&eval&$CMDSTR
########OPTION&-d
&&if&[&"$TBLD"&=&"Y"&-o&"X${TBLS}${TBLD}"&=&"X"&];then&
&&&&CMDSTR="awk&'/^INSERT&INTO&\`$TBL\`.*\(.+\).+\);$/{print&\$0}'&$FLE"
&&&&#echo&$CMDSTR
&&&&eval&$CMDSTR
fi从命令行登录MySQL数据库服务器登录使用默认3306端口的MySQL/usr/local/mysql/bin/mysql&-u&root&-p通过TCP连接管理不同端口的多个MySQL(注意:MySQL4.1以上版本才有此项功能)/usr/local/mysql/bin/mysql&-u&root&-p&--protocol=tcp&--host=localhost&--port=3307通过socket套接字管理不同端口的多个MySQL/usr/local/mysql/bin/mysql&-u&root&-p&--socket=/tmp/mysql3307.sock通过端口和IP管理不同端口的多个MySQL/usr/local/mysql/bin/mysql&-u&root&-p&-P&3306&-h&127.0.0.1修改登录密码MySQL默认没有密码,安装完毕增加密码的重要性是不言而喻的。usr/bin/mysqladmin&-u&root&password&'new-password'格式:mysqladmin&-u用户名&-p旧密码&password&新密码显示数据表的结构mysql&mysql&显示表的创建信息show cre更改表结构,将zhangyan表username字段的字段类型改为CHAR(25)ALTER&TABLE&zhangyan&CHANGE&username&username&CHAR(25);创建名称为ocean的数据库mysql& cmysql&mysql& dr将表中记录清空delete from命令格式:delete from 表名 where 表达式例如,删除表 MyClass中编号为1 的记录: && mysql& delete from MyClass where id=1;mysql& delete&from&mysql& truncate table db1.t1;将当前目录下的mysql.sql导入到数据库中mysql& source ./mysql.添加主键: alter table&表名 add primary key(列名)删除主键: alter table 表名给某列改名: alter table 表名 change 列名 属性列表 比如alter table student change id no char(4)添加某列: 1 在表的最前面添加列&比如给student表添加id属性 放在表的最前面alter table student add id int(4) not null auto_increme2&在表的某个列后加列&比如给student表添加id属性 放在列no的最前面alter table student add a int(11)删除某列:&alter table&表名 drop column 列名;更改某列属性 比如修改student no字段属性 alter table student modify no char(4);添加索引:alter table&表名&add index 列名删除索引:alter table&表名 drop index 列名删除外键:alter table 表名 drop foreign key 约束名limit的使用:select * from&表名 limit 2;//如果只给定一个参数,它表示返回最大的记录行数目select * from&表名 limit 1,3;// 第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目.mysql命令行备份数据库常见选项:--all-databases, &-A: 备份所有数据库--databases, &-B: 用于备份多个数据库,如果没有该选项,mysqldump 将把第一个名字参数作为数据库名,后面的作为表名。使用该选项,mysqldum把每个名字都当作为数据库名。--force, &-f:即使发现sql错误,仍然继续备份--host=host_name, &-h host_name:备份主机名,默认为localhost--no-data, &-d:只导出表结构--password[=password], & -p[password]:连接mysql数据库的密码--port=port_num, &-P port_num:连接mysql的端口号--quick, -q:快速导出--tables:覆盖 --databases or -B选项,后面所跟参数被视作表名--user=user_name, &-u user_name:连接mysql数据库的用户名--xml, -X:导出为xml文件例如:数据库地址:127.0.0.1数据库用户名:root数据库密码:pass数据库名称:myweb备份服务器上所有数据库的数据和结构mysqldump --all-databases -h127.0.0.1 -uroot -ppass & allbackupfile.sql或者mysqldump -h127.0.0.1 -uroot -ppass -A & all_data.sql备份服务器上所有数据库的数据(加 -t 参数)mysqldump -h127.0.0.1 -uroot -ppass -A -t & F:\all_data.sql备份服务器上所有数据库的结构(加 -d 参数)mysqldump -h127.0.0.1 -uroot -ppass -A -d & F:\all_struct.sql&同时一次备份多个MySQL数据库mysqldump -h127.0.0.1 -uroot -ppass --databases myweb myweb2 & multibackupfile.sql备份MySQL数据库某(些)表。此例备份table1表和table2表。备份到linux主机的/home下mysqldump -h127.0.0.1 -uroot -ppass myweb table1 table2 & /home/backupfile.sql备份单个数据库的数据和结构(数据库名myweb)mysqldump -uroot -ppass myweb & F:\mydb.sql备份数据库到D盘跟目录mysqldump -h127.0.0.1 -uroot -ppass myweb & d:/backupfile.sql导出单个数据库中的其中一张表的结构和数据&mysqldump -h127.0.0.1 -uroot -ppass &database table1 & table1.sql备份服务器上单个数据库的结构(不包含数据)mysqldump -h127.0.0.1 -uroot -ppass myweb -d & F:\myweb.sql仅仅备份数据库结构。同时备份名为myweb数据库和名为myweb2数据库mysqldump --no-data -h127.0.0.1 -uroot -ppass --databases myweb myweb2 & structurebackupfile.sql导出单个数据库中的其中一张表结构(不包含数据)&mysqldump -h127.0.0.1 -uroot -ppass -d myweb table1 & struty_table1.sql&备份服务器上单个数据库的数据mysqldump -h127.0.0.1 -uroot -ppass myweb -t & F:\myweb.sql直接将myweb数据库压缩备份 &备份到D盘跟目录mysqldump -h127.0.0.1 -uroot -ppass myweb | gzip & d:/backupfile.sql.gz备份到当前目录 备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库mysqldump --add-drop-table -h127.0.0.1 -uroot -ppass myweb & backupfile.sql&mysql还原部分分(1)mysql命令行source方法 和 (2)系统命令行方法1.还原服务器上所有数据库:(1) mysql命令行:mysql&source f:\allbackupfile.sql(2) 系统命令行: mysql -h127.0.0.1 -uroot -p123456 & allbackupfile.sql2.还原服务器上单个数据库(需指定数据库)(1) mysql&use mydbmysql&source f:\mydb.sql(2) mysql -h127.0.0.1 -uroot -p123456 mydb &f:\mydb.sql3.还原服务器上单个数据库的多个表(需指定数据库)(1) mysql&use mydbmysql&source f:\multables.sql(2) mysql -h127.0.0.1 -uroot -p123456 mydb &f:\multables.sql4.还原服务器上多个数据库,(一个备份文件里有多个数据库的备份,此时不需要指定数据库) & & & & & &&(1) mysql命令行:mysql&source f:\muldbs.sql(2) 系统命令行: mysql -h127.0.0.1 -uroot -p123456 &f:\muldbs.sql5.还原压缩的MySQL数据库gunzip & backupfile.sql.gz | mysql -h127.0.0.1 -uroot -ppass myweb&6.将数据库转移到新服务器。此例为将本地数据库myweb复制到远程数据库名为serweb中,其中远程数据库必须有名为serweb的数据库mysqldump -h127.0.0.1 -uroot -ppass myweb | mysql --host=***.***.***.*** -u数据库用户名 -p数据库密码 -C serwebwindows下面备份和还原数据库相关操作命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files\MySQL\MySQL Server 5.5\bin(或者直接将windows的环境变量path中添加该目录)2,导出数据库:mysqldump -u 用户名 -p 数据库名 & 导出的文件名&如我输入的命令行:mysqldump -u root -p news & news.sql & (输入后会让你输入进入MySQL的密码)(如果导出单张表的话在数据库名后面输入表名即可)3、会看到文件news.sql自动生成到bin文件下面。命令行导入数据库:1,将要导入的.sql文件移至bin文件下,这样的路径比较方便2,同上面导出的第1步3,进入MySQL:mysql -u 用户名 -p例如我输入的命令行:mysql -u root -p & (输入同样后会让你输入MySQL的密码)4,在MySQL-Front中新建你要建的数据库,这时是空数据库,如新建一个名为news的目标数据库5,输入:mysql&use 目标数据库名例如我输入的命令行:mysql&6,导入文件:mysql&source 导入的文件名;&如我输入的命令行:mysql&source news.&MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成的。查看和修改三种MySQL字符集的方法一、查看MySQL数据库服务器和数据库MySQL字符集。mysql& show variables like '%char%'; &+--------------------------+-------------------------------------+------ &| Variable_name & & & & & &| Value & & & & & & & & & & & & & & & |...... &+--------------------------+-------------------------------------+------ &| character_set_client & & | utf8 & & & & & & & & & & & & & & & &|...... & -- 客户端字符集 &| character_set_connection | utf8 & & & & & & & & & & & & & & & &|...... &| character_set_database & | utf8 & & & & & & & & & & & & & & & &|...... & -- 数据库字符集 &| character_set_filesystem | binary & & & & & & & & & & & & & & &|...... &| character_set_results & &| utf8 & & & & & & & & & & & & & & & &|...... &| character_set_server & & | utf8 & & & & & & & & & & & & & & & &|...... & -- 服务器字符集 &| character_set_system & & | utf8 & & & & & & & & & & & & & & & &|...... &| character_sets_dir & & & | D:\MySQL Server 5.0\share\charsets\ |...... &+--------------------------+-------------------------------------+------&二、查看MySQL数据表(table)的MySQL字符集。mysql& show table status from sqlstudy_db like '%countries%'; &+-----------+--------+---------+------------+------+-----------------+------ &| Name & & &| Engine | Version | Row_format | Rows | Collation & & & |...... &+-----------+--------+---------+------------+------+-----------------+------ &| countries | InnoDB | & & &10 | Compact & &| & 11 | utf8_general_ci |...... &+-----------+--------+---------+------------+------+-----------------+------三、查看MySQL数据列(column)的MySQL字符集。mysql& show full co &+----------------------+-------------+-----------------+-------- &| Field & & & & & & & &| Type & & & &| Collation & & & | ....... &+----------------------+-------------+-----------------+-------- &| countries_id & & & & | int(11) & & | NULL & & & & & &| ....... &| countries_name & & & | varchar(64) | utf8_general_ci | ....... &| countries_iso_code_2 | char(2) & & | utf8_general_ci | ....... &| countries_iso_code_3 | char(3) & & | utf8_general_ci | ....... &| address_format_id & &| int(11) & & | NULL & & & & & &| ....... &+----------------------+-------------+-----------------+---修改mysql默认字符集的方法(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,如 default-character-set = utf8&character_set_server = utf8修改完后,重启mysql的服务,service mysql restart使用 mysql& SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8+--------------------------+---------------------------------+ &&| Variable_name | Value | &&+--------------------------+---------------------------------+ & &| character_set_client | utf8 | &&| character_set_connection | utf8 | &&| character_set_database | utf8 | &| character_set_filesystem | binary | &&| character_set_results | utf8 | &&| character_set_server | utf8 | &&| character_set_system | utf8 | &&| character_sets_dir | D:"mysql-5.0.37"share"charsets" | &&+--------------------------+---------------------------------+ &(2) 还有一种修改mysql默认字符集的方法,就是使用mysql的命令mysql& SET character_set_client = utf8 ; &mysql& SET character_set_connection = utf8 ; &&mysql& SET character_set_database = utf8 ; &&mysql& SET character_set_results = utf8 ; & &mysql& SET character_set_server = utf8 ; &&&mysql& SET collation_connection = utf8 ; &mysql& SET collation_database = utf8 ; &&mysql& SET collation_server = utf8 ;&一般就算设置了表的mysql默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:SET NAMES 'utf8'; &它相当于下面的三句指令:SET character_set_client = utf8; &SET character_set_results = utf8; &&SET character_set_connection = utf8;&mysql脚本优化工具tuning-primer.sh使用
今天推荐给大家一个不错的脚本tuning-primer.sh,可以帮助我们去查看一下msyql运行情况,产生报告和给出一些建议,我们可以根据这些建议,结合mysql服务器的实际情况,对mysql进行优化。一,下载以及使用 &1,wget & 2,将tuning-primer.sh拷贝到my.cnf的同级目录3,运行 sh tuning-primer.sh
[root@BlackGhost mysql]# sh tuning-primer.sh
Using login values from ~/.my.cnf- INITIAL LOGIN ATTEMPT FAILED -Testing for stored webmin passwords:None FoundCould not auto detect login info!Found Sockets: /tmp/mysql.sock&&&&&&&&&&&&&&&& //找到一个mysql.sockUsing: /tmp/mysql.sock&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //使用这个.sock文件Would you like to provide a different socket?: [y/N] n&&&&&& //是否使用其他的socketDo you have your login handy ? [y/N] : y&&&&&&& //是否手动输入用户名和密码,当然你可以在my.cnf里面设置User: rootPassword:
Would you like me to create a ~/.my.cnf file for you? [y/N] : n&&&& //是不是要帮你在创建一个my.cnf
你也可以把用户名和密码放到my.cnf里面,如下
[client]user & & & & & &= 用户名password & & & &= 密码socket & & & & &= /tmp/mysql.sock二,运行结果,以及部分分析和建议
我是以本机的mysql为例来进行测试的。-- MYSQL PERFORMANCE TUNING PRIMER --- By: Matthew Montgomery -
MySQL Version 5.1.26-rc-log i686
Uptime = 0 days 0 hrs 0 min 28 secAvg. qps = 0Total Questions = 15Threads Connected = 1Warning: Server has not been running for at least 48hrs.It may not be safe to use these recommendations 告诉我服务运行还不超过48个小时,这样不安全
To find out more information on how each of theseruntime variables effects performance visit:
/doc/refman/5.1/en/server-system-variables.html
Visit /products/enterprise/advisors.htmlfor info about MySQL's Enterprise Monitoring and Advisory ServiceSLOW QUERIES&& (慢查询)The slow query log is enabled.Current long_query_time = 2.000000 sec.You have 0 out of 36 that take longer than 2.000000 sec. to completeYour long_query_time seems to be fineBINARY UPDATE LOG&&&& (增加备份时的log文件)The binary update log is enabledThe expire_logs_days is not set.The mysqld will retain the entire binary log until RESET MASTER or PURGE MASTER LOGS commands are run manuallySetting expire_logs_days will allow you to remove old binary logs automaticallySee /doc/refman/5.1/en/purge-master-logs.htmlBinlog sync is not enabled, you could loose binlog records during a server crash 告诉我binary log没有设置生存时间,会一直保存下来,只到主服务器重起,并且binlog的同步并没有激活,如果服务器崩溃binlog数据将丢失 WORKER THREADS& (工作线程)Current thread_cache_size = 0Current threads_cached = 0Current threads_per_sec = 1Historic threads_per_sec = 0Your thread_cache_size is fineMAX CONNECTIONS& (最大连接数)Current max_connections = 500Current threads_connected = 1Historic max_used_connections = 1The number of used connections is 0% of the configured maximum.You are using less than 10% of your configured max_connections.Lowering max_connections could help to avoid an over-allocation of memorySee "MEMORY USAGE" section to make sure you are not over-allocating 告诉我,目前已连接的最大连接和设置的最大连接的比率差不多是0%,建议我把最大连接设置小一点,可以节省一点内存
No InnoDB Support Enabled!MEMORY USAGE&&& (内存使用)Max Memory Ever Allocated : 17 MConfigured Max Per-thread Buffers : 796 MConfigured Max Global Buffers : 16 MConfigured Max Memory Limit : 812 MPhysical Memory : 1003 MMax memory limit seem to be within acceptable normsKEY BUFFER& (KEY缓存)No key reads?!Seriously look into using some indexesCurrent MyISAM index space = 16 MCurrent key_buffer_size = 16 MKey cache miss rate is 1 : 0Key buffer free ratio = 88 %Your key_buffer_size seems to be fineQUERY CACHE&& (查询缓存)Query cache is supported but not enabled&&&&&& 查询缓存是支持的,但是没有激活Perhaps you should set the query_cache_size&& 建议我设置一下query_cache_size的大小 SORT OPERATIONS&& (排序操作)Current sort_buffer_size = 512 KCurrent read_rnd_buffer_size = 512 KNo sort operations have been performedSort buffer seems to be fineJOINS&& (连接)Current join_buffer_size = 132.00 KYou have had 0 queries where a join could not use an index properlyYour joins seem to be using indexes properly
OPEN FILES LIMIT& (最大打开文件数)Current open_files_limit = 2500 filesThe open_files_limit should typically be set to at least 2x-3xthat of table_cache if you have heavy MyISAM usage. 告诉我,如果大量使用myisam的话,把open_files_limit的大小设置成table_cache大小的2倍-3倍
Your open_files_limit value seems to be fineTABLE CACHE& (表缓存)Current table_open_cache = 64 tablesCurrent table_definition_cache = 256 tablesYou have a total of 506 tablesYou have 64 open tables.Current table_cache hit rate is 12%, while 100% of your table cache is in useYou should probably increase your table_cacheYou should probably increase your table_definition_cache value. 告诉我打开了多少文件,table_cache缓存的比率是多少,并建议我增加table_cache和table_definition_cache的值TEMP TABLES& (临时表)Current max_heap_table_size = 16 MCurrent tmp_table_size = 16 MOf 141 temp tables, 10% were created on diskCreated disk tmp tables ratio seems fineTABLE SCANS& (表扫描)Current read_buffer_size = 256 KCurrent table scan ratio = 12 : 1read_buffer_size seems to be fineTABLE LOCKING (表锁定)Current Lock Wait ratio = 0 : 225Your table locking seems to be fine
从上面的分析报告,以及建议可以看出,本机的mysql真的要好好调优一下。& mysql表连接,子查询以及if判断创建表:&CREATE TABLE&emp&(&ename&varchar(10) DEFAULT NULL,&hiredate&date DEFAULT NULL,&sal&decimal(10,2) DEFAULT NULL,&deptno&int(2) DEFAULT NULL,&age&int(3) DEFAULT NULL&) ENGINE=InnoDB DEFAULT CHARSET=utf8CREATE TABLE&dept&(&deptno&int(2) DEFAULT NULL,&deptname&varchar(20) DEFAULT NULL&) ENGINE=InnoDB DEFAULT CHARSET=utf8表连接:当需要同时显示多个表中的字段时,使用表连接.内连接:仅选出两张表中互相匹配的记录
外连接:既选出匹配的记录,也选出不匹配的记录
左连接:包含所有的左表中的记录,即使右表中没有和它相匹配的记录
例如,用户表中有部门id,使用左连接查询右表,得到相应的部门名称,对于用户表中的id在右表中找不到对应的记录时结果为NULL
& select ename,hiredate,sal,emp.deptno,age,deptname from emp left join dept on emp.deptno=dept.
& &+-------+------------+------+--------+------+----------+ & &| ename | hiredate & | sal &| deptno | age &| deptname |
& &+-------+------------+------+--------+------+----------+ & &| zzxl &| 2000-01-01 | 2000 | & & &1 | NULL | dept1 & &|
& &| lisa &| 2003-01-01 | 3000 | & & &2 | & 20 | dept2 & &|
& &| dony &| NULL & & & | 2000 | & & &5 | NULL | dept5 & &|
& &+-------+------------+------+--------+------+----------+ 右连接:包含所有的右表中的记录,即使左表中没有和它相匹配的记录
select ename,emp.deptno,deptname from emp right join dept on emp.deptno=dept.
& &+-------+--------+----------+ & &| ename | deptno | deptname |
& &+-------+--------+----------+ & &| dony &| & & &5 | dept5 & &|
& &| NULL &| NULL & | dept6 & &|
& &| zzxl &| & & &1 | dept1 & &|
& &| lisa &| & & &2 | dept2 & &|
& &+-------+--------+----------+子查询:进行查询时,当需要的条件是另外一个查询的结果是,使用子查询&例如:查询所有部门中的用户| zzxl &|
| 2000 | & & &1 | NULL |
| 3000 | & & &2 | & 20 |如果子查询结果唯一,可以用=代替in注意:表连接用于优化子查询记录联合:将多次查询结果合并显示select deptno from emp union select deptno from//去除重复数据select deptno from emp union all select deptno fromcreate table salary(userid int,salary decimal(10,2));&insert into salary values(1,1000),(2,2000),(3,3000),(4,4000),(1,null);if判断| & & &1 | 1000 & | low & |
| & & &2 | 2000 & | low & |
| & & &3 | 3000 & | high &|
| & & &4 | 4000 & | high &|if&null判断| 1000 & & & & & & |
| 2000 & & & & & & |
| 3000 & & & & & & |
| 4000 & & & & & & |case whenselect&case&when&salary&=2000&then&'low'&else&'high'&end&from&select&case&salary&when&1000&then&'low'&when&2000&then&'mid'&else&&'high'&end&from&mysql 常用语句 整理$ path/mysqld_safe -user=mysql &$ /mysqladmin -p shutdown++修改root口令$ mysqladmin -u root -p password ‘新密码’++查看服务器状态$ path/mysqladmin version -p++连接远端mysql服务器$ path/mysql -u 用户名 -p #连接本机$ path/mysql -h 远程主机IP -u 用户名 -p#连接远程MYSQL服务器++创建/删除 数据库或表$ mysqladmin -u root -p create xxxmysql& create database 数据库名;mysql& create TABLE items (id INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY ,symbol CHAR(4) NOT NULL,username CHAR(8),INDEX sym (symbol),INDEX …..UNIQUE(username)) type=mysql& drop database [if exists] 数据库名mysql& create table 表名;mysql& drop table 表名;++查看数据库和查看数据库下的表mysql&mysql&mysql&mysql& desc 表名; #查看具体表结构信息mysql& SHOW CREATE DATABASE db_name #显示创建db_name库的语句mysql& SHOW CREATE TABLE tbl_name #显示创建tbl_name表的语句++创建用户mysql& grant select,insert,update,delete,alter on mydb.* to test2@localhost identified by “abc”;mysql& grant all privileges on *.* to test1@”%” identified by “abc”;mysql&++用户管理mysql& update user set password=password (’11111′) where user=’test1′; #修改test1密码为111111mysql& DELETE FROM user WHERE User=”testuser” and Host=”localhost”; #删除用户帐号mysql& SHOW GRANTS FOR user1; #显示创建user1用户的grant语句++mysql数据库的备份和恢复$ mysqldump -uuser -ppassword -B DB_name [--tables table1 --tables table2] & exportfile.sql$ mysql -uroot -p xxx & aaa.sql #导入表$ mysqldump -u 用户名 -p 数据库名 表名& 导出的文件名 ##导出单独的表++导出一个数据库结构$ mysqldump -u wcnc -p -d ?add-drop-table smgp_apps_wcnc &wcnc_db.sql-d 没有数据 ?add-drop-table 在每个create语句之前增加一个drop table++忘记mysql密码先停止所有mysql服务进程$ mysqld_safe ?skip-grant-tables & mysqlmysql&mysql& update user set password=password(’111111′) where user=’root’;mysql&然后重启mysql并以新密码登入即可++当前使用的数据库mysql& select database();===数据库日常操作维护====++创建表mysql& create table table_name(column_name datatype {identity |null|not null},f_time TIMESTAMP(8),…)ENGINE=MyISAM AUTO_INCREMENT=3811 DEFAULT CHARSET=utf8;例: CREATE TABLE guest (name varchar(10),*** varchar(2),age int(3),career varchar(10));# desc guest可查看表结构信息# TIMESTAMP(8) YYYYMMDD 其中(2/4/6/8/10/12/14)对应不同的时间格式mysql& SHOW CREATE TABLE tbl_name #显示创建tbl_name表的语句++创建索引可以在建表的时候加入index indexname (列名)创建索引,也可以手工用命令生成 create index index_name on table_name (col_name[(length)],… )mysql& CREATE INDEX number ON guest (number(10));mysql& SHOW INDEX FROM tbl_name [FROM db_name] #显示现有索引mysql& repair TABLE date QUICK; #索引列相关变量变化后自动重建索引++查询及常用函数mysql& select t1.name, t2.salary from employee AS t1, info AS t2 where t1.name = t2.mysql& select college, region, seed from tournament ORDER BY region,mysql& select col_name from tbl_name WHERE col_name & 0;mysql& select DISTINCT …… [DISTINCT关键字可以除去重复的记录]mysql& select DATE_FORMAT(NOW(),’%m/%d/%Y’) as DATE, DATE_FORMAT(NOW(),’%H:%m:%s’) AS TIME;mysql& select CURDATE(),CURTIME(),YEAR(NOW()),MONTH(NOW()),DAYOFMONTH(NOW()),HOUR(NOW()),MINUTE(NOW());mysql& select UNIX_TIMESTAMP(),UNIX_TIMESTAMP(),FROM_UNIXTIME(UNIX_TIMESTAMP()); mysql& select PASSWORD(”secret”),MD5(”secret”); #加密密码用mysql& select count(*) from tab_name order by id [DESC|ASC]; #DESC倒序/ASC正序* 函数count,AVG,SUM,MIN,MAX,LENGTH字符长度,LTRIM去除开头的空头,RTRIM去尾部空格,TRIM(str)去除首部 尾部空格,LETF/RIGHT(str,x)返回字符串str的左边/右边x个字符,SUBSTRING(str,x,y)返回str中的x位置起至位 置y的字符mysql& select BINARY ‘ross’ IN (’Chandler’,’Joey’, ‘Ross’); #BINARY严格检查大小写* 比较运算符IN,BETWEEN,IS NULL,IS NOT NULL,LIKE,REGEXP/RLIKEmysql& select count(*),AVG(number_xx),Host,user from mysql.user GROUP by user [DESC|ASC] HAVING user= #分组并统计次数/平均值++UNIX_TIMESTAMP(date)返回一个Unix时间戳记(从’ 00:00:00′GMT开始的秒数)mysql& select UNIX_TIMESTAMP();mysql& select UNIX_TIMESTAMP(’ 22:23:00′);mysql& select FROM_UNIXTIME(); #根据时间戳记算出日期++控制条件函数mysql& select if(1&10,2,3), IF(55&100,’true’,’false’);#IF()函数有三个参数,第一个是被判断的表达式,如果表达式为真,返回第二个参数,如果为假,返回第三个参数.mysql& select CASE WHEN (2+2)=4 THEN “OK” WHEN (2+2)&&4 THEN ‘NOT OK’ END AS++系统信息函数mysql& select DATABASE(),VERSION(),USER();mysql& select BENCHMARK(9999999,LOG(RAND()*PI())) AS PERFORMANACE; #一个测试mysql运算性能工具++将wp_posts表中post_content字段中文字”old”替换为”new”mysql& update wp_posts set post_content=replace(post_content,’old’,’new’)++改变表结构mysql& alter table table_name alter_spec [, alter_spec ...]例:alter table dbname add column userid int(11) not null primary key auto_这样,就在表dbname中添加了一个字段userid,类型为int(11)。++调整列顺序mysql& alter table tablename CHANGE id id int(11)++修改表中数据insert [into] table_name [(column(s))] values (expression(s))例:mysql&insert into mydatabase values(’php’,’mysql’,’asp’,’sqlserver’,’jsp’,’oracle’);mysql& create table user select host,user from mysql.user where 1=0;mysql& insert into user(host,user) select host,user from mysql.++更改表名命令:rename table 原表名 to 新表名;++表的数据更新mysql& update table01 set field04=[, field05=062218] where field01=1;++删除数据mysql& delete from table01 where field01=3;#如果想要清空表的所有纪录,建议用truncate table tablename而不是delete from tablename.++SHELL提示符下运行SQL命令$ mysql -e “show slave status\G ”++坏库扫描修复cd /var/lib/mysql/xxx && myisamchk playlist_block++insert into a (x) values (’11a’)出现: ata truncated for column ‘x’ at row 1解决办法:在my.ini里找到sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION”把其中的STRICT_TRANS_TABLES,去掉,然后重启mysql就ok了++复制表mysql& create table target_table like source_table++innodb支持事务新表:create TABLE table-name (field-definitions) TYPE=INNODB;旧表: alter TABLE table-name TYPE=INNODB;mysql& start transaction #标记一个事务的开始mysql& insert into….. #数据变更mysql& ROLLBACK或commit #回滚或提交mysql& SET AUTOCOMMIT=1; #设置自动提交mysql& select @@ #查看当前是否自动提交++表锁定相关mysql& LOCK TABLE users READ; # 对user表进行只读锁定mysql& LOCK TABLES user READ, pfolios WRITE #多表锁控制mysql& UNLOCK TABLES; #不需要指定锁定表名字, MySQL会自动解除所有表锁定=====一些mysql优化与管理======++管理用命令mysql& show variables #查看所有变量值? max_connections 数据库允许的最大可连接数,#需要加大max_connections可以在my.cnf中加入set-variable = max_connections=32000,可以对与下面的threads_connected值决定是否需要增大.show status [like ....];? threads_connected 数据库当前的连接线程数#FLUSH STATUS 可以重置一些计数器++my.cnf配置?Enable Slow Query Loglong_query_time=1log-slow-queries=/var/log/mysql/log-slow-queries.loglog-queries-not-using-indexes# mysqldumpslow -s c -t 20 host-slow.log #访问次数最多的20个sql语句# mysqldumpslow -s r -t 20 host-slow.log #返回记录集最多的20个sql?othersmax_connections=500 #用过的最大连接数SHOW Status like ‘max_used_connection’;wait_timeout=10 #终止所有空闲时间超过 10 秒的连接table_cache=64 #任何时间打开表的总数ax_binlog_size=512M #循环之前二进制日志的最大规模max_connect_errors = 100query_cache_size = 256M #查询缓存#可用 SHOW STATUS LIKE ‘qcache%’;查看命中率#FLUSH STATUS重置计数器, FLUSH QUERY CACHE清缓存thread_cache = 40#线程使用,SHOW STATUS LIKE ‘Threads_created %’; 值快速增加的话考虑加大key_buffer = 16M#show status like ‘%key_read%’; Key_reads 代表命中磁盘的关键字请求个数#A: 到底 Key Buffer 要设定多少才够呢? Q: MySQL 只会 Cache 索引(*.MYI),因此参考所有 MYI文件的总大小sort_buffer_size = 4M #查询排序时所能使用的缓冲区大小,每连接独享4M#show status like ‘%sort%’; 如sort_merge_passes很大,就表示加大sort_buffer_sizesort_buffer_size = 6M #查询排序时所能使用的缓冲区大小,这是每连接独享值6Mread_buffer_size = 4M #读查询操作所能使用的缓冲区大小join_buffer_size = 8M #联合查询操作所能使用的缓冲区大小skip-locking #取消文件系统的外部锁skip-name-resolvethread_concurrency = 8  #最大并发线程数,cpu数量*2long_query_time = 10 #Slow_queries记数器的查询时间阀值&&mysql索引与优化&&mysql入门教程&&mysql函数&&mysql学习心得总结&本文出自 “” 博客,请务必保留此出处
了这篇文章
附件下载:  
类别:┆阅读(0)┆评论(0)
请输入验证码:

我要回帖

更多关于 谢谢你的温柔mp3下载 的文章

 

随机推荐