**启动 关闭mysql
path=/usr/local/mysql/bin:script:各种目录
$ path/mysqld_safe --user=mysql &
$ mysqladmin -p shutdown
**修改root口令
$ mysqladmin -u root -p password '新密码'
mysqladmin -uroot -p password 'anbaoyu'; #然后输入原始密码
**查看服务器状态
$ path/mysqladmin version -p密码
连接mysql远程服务器
$ path/mysql -u用户名 -p localhost
$ path/mysql -h 远程主机ip -u用户名 -p密码
++创建、删除数据库或表
$ mysqladmin -u root -p create xxx
mysql>create database xxx
mysql> create table members(id int not null auto_increment primary key,name char(20) not null,tel int(20));type=innodb;
添加记录:
insert into t1 set name=lili,qq=88888;
insert into userinfo set name='anbaoyu',age=30,gender='male';
删除库:
mysql>drop database [if exists] 数据库名
mysql>drop table 表名;
++查看数据库和数据下的表
show databases;
show tables;
show table status;
desc 表名字 //查看具体表结构信息
show create database db_name //显示创建db_name库的语句
show create table 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';
flush privileges;
++用户管理
mysql>update user set password=password ('1111') where user='test1' 修改test1密码为1111
需要更新 flush privileges;
mysql>DELETE FROM user where User='testuser' and Host='localhost'; 删除用户账户
mysql>show grants for user1; 显示创建user1用户的grant语句
++mysql数据备份和恢复
$ mysqldump -uuser -ppassword -B DB_name [--tables tab1 --tables tab2]>exportfile.sql
$ mysql -uroot -p xxx <aa.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密码 (root)
先停止所有mysql服务进程
$ mysqld_safe ?skip-grant-table & mysql
mysql> use mysql;
mysql> update user set password=password('1111') where user='root';
mysql> flush privileges;
重启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),sex 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
mysql> alter table members add index index_name (id);
members:表名
index:普通索引
index_name:索引的名字
id:为表里字段
msyql> show index from tbl_name //显示现有索引
mysql> repair table date quick; //索引列相关变量变化后自动重建索引
++查询及常用函数
mysql> select t1.name,t2.salary from employes AS t1,info AS t2 where t1.name=t2.name;
mysql> select college, region, seed from tournament order by region, seed;
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 count(*) from tab_name order by id [DESC|ASC];
***函数***
count ,AVG,SUM,MIN,MAX,
LENGTH字符长度
LTRIM去除开头的空格
RTRIM去除尾部空格
TRIM去除首部和尾部的空格
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/RLIKE
mysql> select count(*),AVG(number_xx),Host,user from mysql.user GROUP by user [DESC|ASC] HAVING user=root;
select BENCHMARK(9999999,LOG(RAND()*PI())) AS PERFORMANACE; #一个测试mysql运算性能工具
改变表结构
mysql> alter table table_name alter_spec [, alter_spec ...]
例:alter table dbname add column userid int(11) not null primary key auto_increment;
这样,就在表dbname中添加了一个字段userid,类型为int(11)
++调整列顺序
mysql> alter table tablename CHANGE id id int(11) first;
++修改表中数据
insert [into] table_name [(column(s))] values (s)
例:mysql>insert into mytable values ('php','mysql','asp','sqlserver','jsp','oracle');
mysql>create table user select host,user from mysql.user where cord=1;
mysql>insert into user(host,user) select host,user from mysql.user;
++更改表名
命令:rename table 原名1 to 新名2;
++表的数据更新
mysql>update table01 set field04=19991222 , field05=1222333 where fied=6;
++删除数据
mysql>delete from table01 where field=11;
如果想要清空表的所有记录,建议用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 ('lla')
出现:ata truncated for column 'x' at row 1
解决办法:
在my.ini里找到
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONO"
把其中的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 @@autocommit 查看当前是否自动提交
++表锁定相关
mysql>lock table users read;
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 可以重置一些计数器
show processlist
kill id
++my.cnf配置
?Enable Slow Query Log
long_query_time=1
log-slow-queries=/var/log/mysql/log-slow-queries.log
log-queries-not-using-indexes
# mysqldumpslow -s c -t 20 host-slow.log #访问次数最多的20个sql语句
# mysqldumpslow -s r -t 20 host-slow.log #返回记录集最多的20个sql
?others
max_connections=500 #用过的最大连接数SHOW Status like ‘max_used_connection’;
wait_timeout=10 #终止所有空闲时间超过10秒的连接
table_cache=64 #任何时间打开表的总数
ax_binlog_size=512M #循环之前二进制日志的最大规模
max_connect_errors = 100
query_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 #查询排序时所能使用的缓冲区大小,这是每连接独享值6M
read_buffer_size = 4M #读查询操作所能使用的缓冲区大小
join_buffer_size = 8M #联合查询操作所能使用的缓冲区大小
skip-locking #取消文件系统的外部锁
skip-name-resolve
thread_concurrency = 8 #最大并发线程数,cpu数量*2
long_query_time = 10 #Slow_queries记数器的查询时间阀值