Mysql简单使用

MySQL使用

允许外面机器(各种客户端)连接mysql

允许用户root从任意ip的主机连接到mysql服务器,并使用mysqladmin作为密码
mysql> grant all privileges on *.* to root@'%' identified by 'mysqladmin';
Query OK, 0 rows affected (0.00 sec)
刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

命令行登录mysql

命令行有两种方式登录mysql:mysql -uroot -p和mysql -u root -p
切记在命令行输入命令时不要,不要带密码登录,否则使用history -c 命令时会看到密码,带来风险

JD:mysqladmin:/usr/local/mysql:>mysql -uroot -p
JD:mysqladmin:/usr/local/mysql:>mysql -u root -p

创建数据库bigdata
mysql> create database bigdata;

Query OK, 1 row affected (0.00 sec)

mysql> show database;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1

查看数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bigdata            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
查看
mysql> show processlist;
+-----+------+----------------------+---------+---------+------+-------+------------------+
| Id  | User | Host                 | db      | Command | Time | State | Info             |
+-----+------+----------------------+---------+---------+------+-------+------------------+
| 129 | root | 36.102.228.101:13117 | bigdata | Sleep   |   21 |       | NULL             |
| 130 | root | 36.102.228.101:2783  | NULL    | Sleep   | 1343 |       | NULL             |
| 132 | root | localhost            | NULL    | Query   |    0 | init  | show processlist |
+-----+------+----------------------+---------+---------+------+-------+------------------+
3 rows in set (0.00 sec)

看时间,找到哪个消耗时间长的,有可能导致mysql服务夯住 锁死-	-》这个执行的sql确认清楚,到底能不能kill
mysql> kill 

mysql的字段类型

  • 数值类型

      int 整数型
      long 长整形
      float 单精度
      double 双精度
      decimal 小数型 金额
    
  • 字符串类型

      char 字节 定长 范围0-255字节 如果长度不够会自动补全
      varhar 字符串 变长 范围0-65535字节
    

日期类型

	date 日期 YYYY-MM-DD
	time HH:MM:SS
	datetime 年月日时分秒 YYYY-MM-DD HH:MM:SS
	timestamp 年月日时分秒 YYYY-MM-DD HH:MM:SS

sql类型

DDL 数据定义语言: create drop 
DML 数据操作语言: insert update delete select 增删改查
DCL 数据控制语言: grant

建表规划

create table rzdata(
id int(11) not null auto_increment,

name varchar(200),
age  int(3),



createuser varchar(200) ,
createtime timestamp not null default current_timestamp,

updateuser varchar(200) ,
updatetime timestamp not null default current_timestamp on update current_timestamp,

primary key (id)
);
  • 表名称 字段名统一不能是中文,也不能是汉语拼音

  • 统一风格,已存在的表是什么风格,就要遵循;如果是新建的表,风格定义要统一标准

  • 第一个字段必须id 是自增长,是主键且无意义

  • 一张表只有一个主键 primary key==》id 非空 unique+not null,业务字段如果是非空,需要unique约束

      ALTER TABLE bigdata.testdata ADD CONSTRAINT testdata_un UNIQUE KEY (name) ;
    
  • 后四个字段必须要加上

      用户 创建时间 修改用户 修改时间
    
  • 业务字段上加上注释

      COMMENT '用户名称'
      COMMENT '用户年龄'
    
  • ENGINE=InnoDB CHARSET
    DEFAULT CHARSET=latin1 表示字符集

      CREATE TABLE `testdata` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(200) DEFAULT NULL COMMENT '用户名称',
    `age` int(3) DEFAULT NULL COMMENT '用户年龄',
    `createuser` varchar(200) DEFAULT NULL,
    `createtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updateuser` varchar(200) DEFAULT NULL,
    `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `rzdata_un` (`name`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
  • 字符集
    字符集包括多种

      database 字符集
      table字符集 
      column 字符集
      服务端 字符集
      客户端字符集
    
      查看创建表的字符集
      mysql> show create database bigdata
      	-> ;
      +----------+--------------------------------------------------------------------+
      | Database | Create Database                                                    |
      +----------+--------------------------------------------------------------------+
      | bigdata  | CREATE DATABASE `bigdata` /*!40100 DEFAULT CHARACTER SET latin1 */ |
      +----------+--------------------------------------------------------------------+
      1 row in set (0.00 sec)
    
      查看字符集(下面的字符集是生成的配置)
      mysql> show variables like '%char%'
      -> ;
      +--------------------------+---------------------------------------------------------------+
      | Variable_name            | Value                                                         |
      +--------------------------+---------------------------------------------------------------+
      | character_set_client     | utf8   #客户端字符集                                                       |
      | character_set_connection | utf8                                                          |
      | character_set_database   | latin1  #database 字符集                                                    |
      | character_set_filesystem | binary                                                        |
      | character_set_results    | utf8                                                          |
      | character_set_server     | latin1  #服务端字符集                                                     |
      | character_set_system     | utf8                                                          |
      | character_sets_dir       | /usr/local/mysql-5.6.23-linux-glibc2.5-x86_64/share/charsets/ |
      +--------------------------+---------------------------------------------------------------+
      8 rows in set (0.00 sec)
    

简单的增删改查

update 和 delete语句执行时,一定要加上条件(切记)
select查询时不要写 * ,应该直接加具体字段
生产数据过过查询时,记得加上limit关键字,限制条数
如果误删,可以从binlog文件恢复 arch/mysql-bin.000001
生产上一般是读写分离

添加到主库,查询在从库中查

datetime timestamp区别

  • 两者的存储方式不一样

      `对于TIMESTAMP:
      它把客户端插入的时间从 当前时区 转化为UTC(世界标准时间)进行存储。
      查询时,将其又转化为客户端当前时区进行返回。
    
      `对于DATETIME:
      不做任何改变,基本上是原样输入和输出。
    
  • 两者所能存储的时间范围不一样

      timestamp所能存储的时间范围为:'1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999'。
    
      datetime所能存储的时间范围为:'1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。
    
  • 总结:TIMESTAMP和DATETIME除了存储范围和存储方式不一样,没有太大区别。当然,对于跨时区的业务,TIMESTAMP更为合适。

ENGINE=InnoDB 是什么?MyISAM区别是什么

  • InnoDB
    它提供了事务控制能力功能,它确保一组命令全部执行成功,或者当任何一个命令出现错误时所有命令的结果都被回退,可以想像在电子银行中事务控制能力是非常重要的。支持COMMIT、ROLLBACK和其他事务特性。最新版本的Mysql已经计划移除对BDB的支持,转而全力发展InnoDB。
  • 区别
    MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
    MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持,外键等高级数据库功能。

binlog文件分为三种模式,分别区别是什么

binlog对于mysql是至关重要的,binlog与undo redo一起保证了数据的完整性,用于数据恢复,崩溃恢复、任一时间点恢复、甚至是任意一条数据的恢复。所有的高可用模式也都是基于binlog进行处理的。

本文主要对binlog的三种存储格式statement、row、mixed进行分析对比其优缺点。

statement格式:

在statement格式下,binlog忠实的记录的执行过的语句,你执行过什么语句它就照搬复制到binlog中。由于其可能造成主从不一致的情况,所以生产环境基本都不会设置为statement。

优势:

	1、节省空间。由于只是对执行的语句进行记录,所以相比row模式binlog所占的空间很小

    2、提高数据库性能。由于binlog是在事务提交时才进行fsync刷盘操作,而刷盘的操作是最耗费IO的,statement只需要记录一条语句而不是记录所有操作过的数据行。

劣势:

可能造成主从不一致

在测试环境执行delete from test limit 10;删除表中的10条数据,观察binlog的内容变化,binlog部分内容如下:

在这里插入图片描述

可以看到执行过的语句被原原本本的记录到binlog中,被同步到从库重做。

执行delete from test limit 10;时还会产生一个警告,大意就是使用statement格式时执行limit语句可能造成主从同步不一致。因为limit语句只是指定了删除10条记录,但没有指定具体是哪10条,当mysql在两次执行时选择了不同的索引进行操作时,删除的记录就是不同的。当然还有其他函数也可能会造成主从不一致。

row格式:

在row格式下,binlog对于DDL操作记录执行的SQL语句,对于DML语句则记录具体操作的数据行。一般生产环境采用该格式。

优势:

对于DML操作记录了具体的行数据,保证重放的一致性,同时也可以对一些误操作的数据进行单独恢复提供了可能性

劣势:

由于记录了每条数据的内容变更,导致了binlog日志占用了很大的空间,由于fsync时一次写入数据过多,在一定程度上影响了性能。

调整binlog格式为row,执行delete from testxxxx limit 10;观察binlog的内容变化,binlog部分内容如下:
在这里插入图片描述

可见binlog修改的每一行数据的具体值都被记录了下来。如果我需要恢复其中的某一条记录只要把delete转换成insert就可以了,这是其他格式做不到的。

mixed格式:

集前两种格式的优点,对于DDL只对SQL语句进行记录。对DML操作则会进行判断,如果mysql判断会造成主从不一致,就会采用row格式记录,反之则用statement格式记录。

优点:

节省空间,提高数据库性能,通过判断保证数据重放时的一致性。

缺点:

无法对误操作数据进行单独恢复

调整binlog格式为mixed,执行delete from test limit 1;和delete from test where a =1;观察binlog的内容变化,binlog部分内容如下:
在这里插入图片描述

binlog文件内容怎么查看

只查看第一个binlog文件的内容

show binlog events;

查看指定binlog文件的内容

show binlog events in 'mysql-bin.000002';

查看当前正在写入的binlog文件

show master status\G

获取binlog文件列表

show binary logs;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值