mysql基础知识

ncurses-devel libaio-devel
多实例
启动文件 --data
配置文件 --my.cnf
启动文件 --mysql 自己写个mysql的启动脚本

单实例mysql启动
pkill mysqld
ps -ef|grep mysqld
/etc/init.d/mysqld

/etc/my.cnf 默认去找/etc/my.cnf文件

第一次启动多实例启动
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null &
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null &

多实例停止
mysqladmin -u root -p123456 -S /data/3306/mysql.sock shutdown
mysqladmin -u root -p123456 -S /data/3307/mysql.sock shutdown

find /data/ type f -name “mysql” |xargs chmod +x
find /data/ type f -name “mysql” -exec ls -l {} \

cp mysql/Path/mysql/bin/* /usr/local/sbin/

初始化路径
5.1 在mysql/bin下
5.5 在 mysql/scripts下
初始化
./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql
./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3307/data --user=mysql
启动数据库
/data/3306/mysql start #数据库启动脚本 start
/data/3306/mysql start
ss -lutup|grep 330

授权
chown -R mysql.mysql /data/

查看安装路径、配置文件路径等
ps -ef|grep mysql

强制linux不记录敏感历史命令
#HISTCONTROL=ignorespace

修改root登录后提示
放在客户端
[mysql]
prompt /u@test_mysql /r:/m:/s->
单独执行,临时生效
prompt /u@test_mysql /r:/m:/s->

多实例本地登录
mysql -uroot -p -S /data/3306/mysql.sock
mysql -uroot -p -S /data/3307/mysql.sock
多实例远程登录
mysql -uroot -p -h ip -P 3306

mysql 帮助,登录mysql后 help+命令
mysql> help show grant
mysql> help show show

安全
删除所有mysql中的用户,包括root
mysql>delete from mysql.user
新增和root等价的用户
mysql>grant all privileges on . to system@localhost identified by ‘passwd123456’ with grant option;

更改密码
无密码创建密码
#mysqladmin -uroot password ‘创建密码’
多实例    已有密码,修改密码
#mysqladmin -uroot -p’23456’ password’新密码’ -S /data/3306/mysql.sock
mysql>select user,host,password from mysql.user;
mysql>updata mysql.user set password=password(123456) where user=‘root’ and host=‘localhost’;
mysql>flush privileges;
修改当前用户密码
mysql>set password=password(123456);

单实例mysql数据库密码丢失
/etc/init.d/mysqld stop
mysqld_safe --skip-grant-tables --user=mysql &
mysql -uroot -p 空密码登录
mysql>updata mysql.user set password=password("    123456"    ) where user=‘root’ and host=‘localhost’;
mysql>flush privileges;
mysql>quit
mysqladmin -uroot -p’123456’ shutdown
/etc/init.d/mysqld start
mysql -uroot -p

多实例mysqll数据库密码丢失
pkill mysqld
mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-tables &
mysql -uroot -p -S /data/3306/mysql.sock    空密码登录
mysql>updata mysql.user set password=password("    123456"    ) where user=‘root’ and host=‘localhost’;
mysql>flush privileges;
mysql>quit
mysqladmin -uroot -p’123456’ -S /data/3306/mysql.sock shutdown
/data/3306/mysql start
mysql -uroot -p -S /data/3306/mysql.sock

–skip-grant-tables 密码丢失重设密码启动数据库修改

更改数据库字符集
create database test DEFAULT    CHARACTER SET utf8 COLLATE utf8_general_ci;
create database test DEFAULT    CHARACTER SET gbk COLLATE gbk_general_ci;

编译数据库时指定字符集
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
数据库需要支持所编译的字符集
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii\

查看数据库
mysql>help show
show databases like ‘%sc_%’;
select database(); 查看当前数据库
扩展
select user(); 查看当前用户
select now();    查看当前时间
select version() 查看当前版本
删除数据库
drop database 数据库名;

删除mysql系统多余账号
drop user “user”@"主机域“ 单引号或者双引号 不能不加
drop user ‘’@‘localhost’; ''空
drop删除不了的(如,主机名大写 特殊字符等)用delete删
delete from mysql.user where user=‘root’ and host=‘oldboy’;
flush privileges;

授权
grant all on test.to ‘test1’@‘localhost’ IDENTIFIED BY ‘123456’;
等价于
create user ‘test1’@‘localhost’ IDENTIFIED BY ‘123456’;
GRANT ALL on test. to ‘test1’@‘localhost’;
show grants for 'test@‘localhost’;

表的操作
show create tables tab1\G
create tab1(
id int(4) not null AUTO_INCREMENT,
name char(20) not null ,
age tinyint(2) NOT NULL default ‘0’ ,
dept varchar(16) default NULL,
列6 类型4 ,
primary key(id),
KEY index_name(name),
) ENGINE=innodb default charset-utf8

查看表结构
desc tab1

创建主键索引
alter table student change id id int primary key auto_increment;

删除主键索引
alter table student drop primary key;

删除普通索引
alter table student drop index index_name;
或者
drop index index_dept on student;

添加索引
alter table student add    index index_name(name);

列的前几个字符创建索引
create index index_dept on student(dept(8));

创建联合索引
create index ind_name_dept on student(name,dept);

创建联合索引(前n个字符)
create index ind_name_dept on student(name(4),dept(8));

查看索引
show index from student\G
Non_unique:0 表示唯一
Non_unique:1 表示不唯一索引

索引的前缀生效太特性
index(a,b,c)仅 a,ab,abc三个查询条件生效 其他不生效 比如bc, b等

创建唯一索引(非主键)
create unique index uni_ind_name on student(name);

索引条件
读多写少
在条件列上创建
select 列1,列2 ,列3 from student where 列4 # 在列4上创建索引,而不是在列1,2,3上
唯一值多的大表上

help alter table 或者 help create index 查看索引帮助

插入
insert into student values(每行依次列的值),(行2列1值    ,行2列2值,行2列3值),(),(),();
insert into student(列1,列2,列3)values(列1值,列2值,列3值);

备份数据库
#mysqldump -uroot -p123456 -A >/data/back.sql
#mysqldump -uroot -p123456 -B PRO >/data/pro.sql
#cat /data/back.sql

查询
select id,name from test limit=2; 前两行
select id,name from test where id=1;
select id,name from test where id=1 and name=‘tom’;
select id,name from test where id=1 or name=‘tom’;
select id,name from test where id>1 and id<4;
select id,name from test where id>2 or id <4;
select id,name from test order by id;
select id,name from test order by id asc; 升序 默认
select id,name from test where id>2 or id <4 order by id desc;

联合查询
select tab.列1 tab2.列n ,tab3.列n form tab1 tab2 tab3 where 表1.列i=表2.列j and 表2.列m=表3.列n order by 表1.列k;
mysql只有表名区分大小写

更新表
update tab1 set 列1=列值 where id=3; 不加条件很严重,灾难

恢复
打开log-bin=mysql-bin
cp /数据库数据目录/mysqlbin.0000098 /back/
#mysqladmin -uroot -p123456 flush-log
后面的操作全写进mysqlbin.000099
恢复全备 #mysql -uroot -p123456 db1 < /back_pro.sql
查看 #mysql -uroot -p123456 -e “select * from db1.test;” 
#mysqlbinlog -d db1    mysql-bin.0000098 > /back_98_bin.sql
编辑修改 vi /back_98_bin.sql 更改里面错误的语句 如 去掉没加where的update语句
#mysql -uroot -p123456 db1 < /back_98_bin.sql
然后在吧剩下的binlog恢复进去

查看二进制日志
mysql> show binary logs;

时间点恢复
mysqlbinlog mysql-bin.000018 --start-position=2916 --stop-position=4469 | mysql -uroot -p

防止误删除 -U 没有where或者limit关键字时 不应许update和delete
#mysql = ‘mysql -U’

删除数据
delete from 表 where 不加条件 很危险
truncate table tab 快速清空表内容
delete from test; 逻辑清除,按行删
truncate table test; 更快, 清空物理文件

已有表添加字段
alter table 表名 add 添加列名 类型 其他
alter table tab1 add sex char(4) default not null comment;

添加多字段
alter table tab1 add age int(4) after name ,
add qq varchar(15) first;

改变字段名
alter table 表名称 change 字段原名称 字段新名称 字段类型 [是否允许非空;

改字段类型
alter table 表名称 modify 字段名称 字段类型 [是否允许非空];

删除字段
ALTER TABLE mytable DROP 字段名;

更改表名
rename table 原表名 to 新表名;
alter table 原表名 rename to 新表名;

删表
drop table tab;

字符集乱码
法一、set names latin1;后再执行select等语句。也可把这条语句写入*.sql文件执行
法二、#mysql -uroot -p123456 --default-character-set=latin1 db1</back.sql
法三、配置文件指定
[mysqld]
default-character-set=latin1 5.1以前的版本
character-set-server=latin1 5.5版本
[client]
default-character-set=latin1

不乱码思想
Linux cat /etc/sysconfig/i18n LANG=“zh_CN.utf8”
服务器 [mysqld]
客户端    临时 set names utf8 永久[client]
库 create database db1 DEFAULT CHARACTER SET UTF8 COLLATE utf8_general_ci;
表 create table tab1 (
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
程序

查看、更改参数
show variables\G;
show status;
show global status;
更改参数,不重启生效
临时
set global key_buffer_size=
show variables like ‘key_buffer%’;
永久
在配置文件my.cnf 添加 参数值 如key_buffer_size=

字符集长度
SHOW CHARACTER SET;
#mysql -uroot -p123456 -e “SHOW CHARACTER SET;”|egrep “gbk|utf8|latin1” |awk ‘{print $0}’

查看当前数据库字符集
show variables like ‘character_set%’;

客户端的字符集(不需要重启生效)
character_set_client
character_set_connection
character_set_results
注释:相当于    
1)“set names 字符集“
2)#mysql -uroot -p123456 --default-character-set=latin1
3) [client]

服务端的字符(需要重启生效)
character_set_database
character_set_server
注释[mysqld]

客户端 服务端 库表

修改数据库、表字符集
alter database character set utf8;
alter table tab1 character set utf8;

已有字符集的库和表修改字符集,先导出数据,修改库、表字符集后再导入数据。、

备份
#mysql -uroot -p -B db1 db2 db3 |gzip > /back.sql
#egrep -v “#|*|–|^$” /back.sql
-B 接多个库 增加createdatabase db和use db信息
-A 所有库

分库备份
#mysql -uroot -p’123456aaa’ -e “show databases;”|grep -Evi “database|infor|perfor” |sed -r ‘s#^([a-z].*$)#mysqldump -uroot -p’123456aaa’ --events -B \1 |gzip >/data/back/\1_bal.sql.gz#g’|bash

法二、
脚本
for dbname in mysql -uroot -p'123456aaa' -e "show databases;"|grep -Evi "database|infor|perfor"
do
mysqldump -uroot -p’123456aaa’ --events -B dbname∣gzip>/data/back/ {dbname} |gzip &gt;/data/back/dbname∣gzip>/data/back/{dbname}_bak.sql.gz
done

备份表
#mysql -uroot -p db1 tab1 tab2 tab3 |gzip > /back.sql
分库分表备份(提示:两个for循环嵌套 show databases; show tables;)

全备
#mysql -uroot -p123456 -A -B --events |gzip > /back.sql
#mysql -uroot -p123456 -A -B -F --events |gzip > /back.sql -F刷新binlog日志
#mysql -uroot -p123456 --master-data=1 db1 |gzip > /back.sql

备份表结构
#mysql -uroot -p123456 db1 tab1 -d > /back.sql

备份数据
#mysql -uroot -p123456 db1 tab1 -t > /back.sql
--------------------- 
作者:xin37521 
来源:CSDN 
原文:https://blog.csdn.net/u014041364/article/details/83046030 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值