zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    变量作用域
    模块化编程-函数
    递归
    变量
    形参和实参
    函数返回值
    node.js+yarn环境centos7快速部署
    LINUX磁盘添加挂载
    分布式存储MINIO集群部署实例
    Docker取消默认https连接
  • 原文地址:https://www.cnblogs.com/hjnzs/p/11983123.html
Copyright © 2011-2022 走看看