mysql之基础操作

一、相关信息

服务:mysqld     
端口:3306   
主配置文件:/etc/my.cnf   
初始化脚本:mysql_install_db  
启动命令:mysqld_safe   
数据目录 :/var/lib/mysql 
套接字文件:/var/lib/mysql/mysql.sock
当意外关闭数据库时,再开启时假如开启不了,找到这个,删除再启动 进程文件:/var/run/mysqld/mysqld.pid
设置密码:mysqladmin -uroot  password ‘123456’  
登录:mysql  -u 用户名 -p 密码 -P 端口 -S 套接字文件 
-p 用户密码   
-h 登陆位置(主机名或 ip 地址) 
-P 端口号(3306 改了就不是了)
-S 套接字文件(/var/lib/mysql/mysql.sock) 
退出命令:exit 或 ctrl+d

二、基本使用

1、用户管理
创建用户
mysql> create user love2@'%' identified by '123456';

查看权限,此时用户还没有任何权限。
mysql> show grants for love2@'%';
+-------------------------------------------------------------------+
| Grants for love2@%                                                |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'love2'@'%' IDENTIFIED BY PASSWORD <secret> |
+-------------------------------------------------------------------+

为用户授予权限。
mysql> grant all on *.* to love2@'%' ;
mysql> grant select,alter,on *.* to love2@'%' ; #授予love2用户对所有数据库和数据表,查询,修改表权限。

取消love2用户所有权限
mysql> revoke all on *.* from love2@'%';

用户为自己更改密码 
mysql> set password=password('111111');

root用户更改他人密码
mysql> set password for love2@'%' =password('111111');

删除用户
delete from user where user='love2'
由于delete只会删除user表中的内容,而授权表中的内容不会被清除,我们需要刷新授权表
flush privileges

删除用户的第二种方法
drop user 'love2',默认删除用户 love2@'%'

2、忘记root密码。
root 找回自己的密码并修改 
1、关闭数据库
service mysqld stop
修改主配置文件(/etc/my.cnf)添加:skip-grant-tables 
2、# vim /etc/my.cnf 
skip-grant-tables 
3、启动数据库,空密码登录并修改密码 
mysql> update mysql.user set password=password('123456') where user='root';
4、删除 skip-grant-tables,重启数据库验证新密码
3、数据库操作
mysql>create database web;
mysql>show databases;
4、简单数据表操作
mysql> create database info;
#创建数据库
mysql> use info;
#选择要使用的数据库 
mysql> create table student1 (id int,name char(8),age char(1));
Query OK,0 rows affected (0.07 sec)
#创建 info 表,并添加 id 和 name 字段以及类型 
mysql> desc student1; #查看表结构
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| name  | char(8) | YES  |     | NULL    |       |
| age   | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)
4、复杂一点的表
mysql> create table student2 (
    -> id int unsigned not null auto_increment,#字段要求为正数、且自增长、主键
    -> name char(8) not null default '',#字符型长度 30 字节,默认值为空格
    -> age int not null default 0,#字段默认值为 0
    -> primary key (id));  #设置 id 为主键
5、数据插入
mysql> insert into student2 (id,name,age) values (1,'zs',12); #指明插入字段和数据
mysql> insert into student2 values (2,'ls',13); 按顺序插入
mysql> insert into student2 values (3,'ww',14),(4,'zl',15); #多个插入

将students2的数据插入students1
mysql> insert into student1 select * from student2;
Query OK,4 rows affected,4 warnings (0.03 sec)
Records: 4  Duplicates: 0  Warnings: 4
6、删除数据库
mysql>drop database abc; 
mysql>show databases;
7、删除数据表
mysql>drop table a1; 
Mysql>show table;
8、删除表里的数据记录
mysql>delete from student2 where id=5;      
#删除 id=5 的记录 
mysql> delete from student2 where age between 23 and 25;  
#删除年龄在 23-25 之间的
9、修改表数据
mysql> update student2 set age=21 where id=3;
10、修改表名
mysql>alter table student1 rename student5;
11、表字段修改
1)简单修改表内字段
mysql> alter table student5  modify age char(4) not null;

mysql> desc student5;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| name  | char(8) | YES  |     | NULL    |       |
| age   | char(4) | NO   |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

2)修改数据表的字段类型详情名字
mysql> alter table student5 change age gender char(1) not null default '男';

mysql> desc student5;
+--------+---------+------+-----+---------+-------+
| Field  | Type    | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| id     | int(11) | YES  |     | NULL    |       |
| name   | char(8) | YES  |     | NULL    |       |
| gender | char(1) | NO   |     | 男      |       |
+--------+---------+------+-----+---------+-------+

3)添加字段
#默认添加
alter table  student5 add age int not null;

#添加字段到第一列 
alter table student5 add birthday year first;

#添加到指定字段后
mysql>alter table student5 add class int default 1 after id;  

mysql> desc student5;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| birthday | year(4) | YES  |     | NULL    |       |
| id       | int(11) | YES  |     | NULL    |       |
| class    | int(11) | YES  |     | 1       |       |
| name     | char(8) | YES  |     | NULL    |       |
| gender   | char(1) | NO   |     | 男      |       |
| age      | int(11) | NO   |     | NULL    |       |
+----------+---------+------+-----+---------+-------+

4)删除字段

alter table student5 drop birthday ;

三、备份和还原

1、mysqldump
mysqldump -u 用户名 -p 数据库名  > /备份路径/备份文件名(备份整个数据库)

mysqldump  -u root -p123456 info > /root/info.dump (备份info数据库)

mysqldump -u 用户名 -p 数据库名 表名 > /备份路径/备份文件名(备份数据表)  
备份多个库:--databases 库 1,库 2  
备份所有库:--all-databases 
[root@centos ~]# mysqldump -uroot -p123456  --events --all-databases > /root/all.dump
还原:mysql 数据库 < 备份文件
注意:
还原时,若导入的是某表,请指定导入到哪一个库中。
mysql -uroot -p123456 info < info.dump
2、mysqlhotcopy 备份

类似于我们自己手动将/usr/local/mysql/data/下的数据库文件使用cp备份.但是我们自己手动备份,不会将变化写入日志。

备份:
mysqlhotcopy --flushlog  -u='用户’ -p=’密码’ --regexp=正则  备份目录

备份info数据库到 /tmp/name/目录下
mysqlhotcopy -u root -p 123456  info /tmp/name/

还原:cp -a 备份目录 数据目录(yum安装是这个目录/var/lib/mysql)
cp -a /tmp/name/* /usr/local/mysql/data/ (这个是编译安装时,我们设置的目录)
3、二进制日志(log-bin 日志):

所有对数据库状态更改的操作(create、drop、update 等,都会被记录。
1)修改 my.cnf 配置文件开启 binlog 日志记录功能

# vim /etc/my.cnf 
log-bin=mysql-bin  #启动二进制日志,默认应该是开启的

2)查看binlog日志。

[root@centos data]# ls /usr/local/mysql/data/
centos.err          ib_logfile1         mysql-bin.000002    test/
centos.pid          info/               mysql-bin.000003    
ibdata1             mysql/              mysql-bin.index     
ib_logfile0         mysql-bin.000001    performance_schema/ 

mysql-bin.*文件 为二进制日志文件,使用 mysqlbinlog 命令查看
mysqlbinlog mysql-bin.000005

3)日志还原
按时间还原: --start-datetime --stop-datetime
格式:mysqlbinlog --start-datetime ‘YY-MM-DD HH:MM:SS’ --stop-datetime ‘YY-MM-DD HH:MM:SS’ 二进制日志 | mysql -uroot -p

示例
mysqlbinlog  --start-datetime ‘19-02-04 12:51:36’ --stop-datetime ‘19-12-04 13:30:36’ mysql-bin.000003 | mysql -uroot -p

按文件大小还原: --start-position --stop-position,默认大小为4
格式:mysqlbinlog --start-position 数值 stop-position 数值 二进制日志 | mysql -uroot -p

 mysqlbinlog --start-position 4  --stop-position  565672 mysql-bin.000003 | mysql -uroot -p

相关文章

navicat查看某个表的所有字段的详细信息 navicat设计表只能一...
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起...
文章浏览阅读488次。恢复步骤概要备份frm、ibd文件如果mysql...
文章浏览阅读225次。当MySQL单表记录数过大时,增删改查性能...
文章浏览阅读1.5k次。Mysql创建、删除用户MySql中添加用户,新...
MySQL是一种开源的关系型数据库管理系统,被广泛应用于各类应...