数据库的操作
数据库的操作包括数据库的创建,修改及删除。数据库创建时的字符集设定以及数据库创建完毕后默认字符集更改等等。
创建数据库创建数据库的命令为CREATE DATABASE,数据库创建时需要设定字符集,默认使用的为latin1,需要将其改为utf8mb4。
命令格式:
123456CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ...create_specification: [DEFAULT] CHARACTER SET [=] charset_name #设定字符集 | [DEFAULT] COLLATE [=] collation_name
示例一:
创建数据库不指定字符集
12345678910111213141516#创建一个名字为db3308的数据库MariaDB [(none)]> CREATE DATABASE db3308;Query OK, 1 row affected (0.001 sec)#查看数据库是否被创建出来Ma ...
MySQL的并发控制
在数据库中经常设计到并发访问,此时就涉及到不同用户同时修改同一个资源的问题。此时就涉及到一个冲突的问题。为了防止这种冲突的发生,确保数据的安全,就需要对数据加锁的机制,MyISAM使用的是表级锁,InnoDB使用的是行级锁。锁又分为读锁和写锁,读锁也叫共享锁,只可读不可写,多个读互不阻塞,写锁又称为独占锁,写锁会阻碍其他事务的读和写。锁又有隐式锁和显式锁的分别,隐式锁是由存储引擎自动施加的,显式锁式用户自己手动添加的
手动添加锁的方法
123LOCK TABLES tbl_name lock_type;#tbl_name:需要上锁的表名#lock_type:锁的类型,可以为read,write也就是读锁和写锁
解锁
1UNLOCK TABLES;
第二种加锁方法
12FLUSH TABLES [tbl_name[,...]][WITH READ LOCK]#tbl_name如果不添加则对整个数据库加锁,通常在备份前加全局读锁
MySQL查看数据库表容量大小
MySQL查看数据库表容量大小1.查看所有数据库容量大小
12345678selecttable_schema as '数据库',sum(table_rows) as '记录数',sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'from information_schema.tablesgroup by table_schemaorder by sum(data_length) desc, sum(index_length) desc;
2.查看所有数据库各表容量大小
12345678910111213141516171819202122selecttable_schema as '数据库',table_name as '表名',table_rows as '记录数',trunca ...
MySQL服务器配置
在MySQL数据库运行时,它本质上是跑了一个mysqld的进程,是由mysqld_safe来调用的。mysql_safe是一个脚本,脚本内调用了mysqld二进制程序,所以数据库真正运行时,是靠mysqld对外进行服务的,而mysqld是一个服务器软件,在其背后还支持一些参数和选项。
mysqld选项,服务器系统变量和服务器状态变量的区别mysqld选项mysqld选项就是在进程中mysqld后面所跟的各种参数,这些选项都能存放在服务器的配置文件/etc/my.cnf中。
123[root@localhost Packages]# ps -aux | grep mysqldmysql 9206 0.1 3.5 2275296 144752 ? Sl 16:09 0:01 /app/mysql/bin/mysqld --basedir=/app/mysql --datadir=/data/mysql --plugin-dir=/app/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/ma ...
MySQL系统数据库
MySQL数据库在刚安装完毕后,默认带有mysql、performance_schema、information_schema这三个系统自身带有的数据库。
mysql数据库是mysql的核心数据库,类似于Sql Server中的master库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息
performance_schema数据库是MySQL 5.5开始新增的数据库,主要用于收集数据库服务器性能参数,库里表的存储引擎均为PERFORMANCE_SCHEMA,用户不能创建存储引擎为PERFORMANCE_SCHEMA的表
information_schema数据库是MySQL 5.0之后产生的一个虚拟数据库,物理上并不存在information_schema数据库类似与“数据字典”,提供了访问数据库元数据的方式,即数据的数据。比如数据库名或表名,列类型,访问权限(更加细化的访问方式)
所有以后在备份数据库时,我们只需要备份用户的数据库,以及mysql数据库。
MySQL日志管理(二)
二进制日志由于事务日志严重依赖于存储引擎,比如MyISAM不支持事务,所以对于MyISAM来说就没有事务日志这个概念,只有InnoDB才有事务日志。事务日志内记录的内容,已提交的事务未提交的事务都需要记录到事务日志中,而二进制日志不同。
二进制日志又叫存档日志,记录那些已提交的确定的事件,记录导致数据改变或潜在导致数据改变的SQL语句。二进制日志不依赖于存储引擎。二进制日志详细的记录了数据库所有的增删改操作,所以二进制日志就相当于忠实的记录了数据库的所有的行为(增、删、改)。所以利用二进制日志可以分析了解数据库内数据变化的整个过程。因为二进制日志记录了数据库内所有数据的行为,所以可以通过“重放”日志文件中的事件来生成数据副本,也就是说通过重放二进制日志文件来生成新的数据库备份。基于安全考虑,强烈建议将二进制日志文件和数据文件进行分开存放。
二进制日志的记录格式二进制日志有3种格式
statement:基于语句记录,默认
row:基于行记录,记录的是数据,日志量较大。
mixed:混合模式,系统自行判断基于那种方式进行记录
在工作中,推荐基于row的方式进行记录
二进制日志的开启方式 ...
MySQL日志管理(一)
MySQL的日志MySQL的日志分为事务日志、错误日志、通用日志、慢查询日志、以及二进制日志,此处主要讲解前4种日志的配置及使用方法。二进制日志将在下一节中单独讲解。
事务日志(transaction log)事务日志默认的存放位置为MySQL的数据库目录下的ib_logfile0、ib_logfile1
生产环境中建议将事务日志存放在单独的分区中,防止产生IO的争用。
Innodb事务日志相关配置:
12345678#innodb事务日志相关配置可以使用以下命令进行查看show variables like '%innodb_log';#查询出的结果innodb_log_block_sizeinnodb_log_file_size 5242880 每个日志文件大小,生产环境建议将此数值改大到几百兆,5M数值太小innodb_log_files_in_group 2 日志组成员个数 innodb_log_group_home_dir ./ 事务文件路径 innodb_flush_log_at_trx_commit 默认为1
inno ...
MySQL的事务
什么是事务?事务:一组原子性的SQL语句,或一个独立工作单元
事务日志:记录事务信息,实现undo,redo等故障恢复功能。
UNDO操作:当对数据执行修改操作时会先将数据读入到内存中,然后在内存中进行修改,修改完毕后记录到事务日志,如果一个事务在执行过程中只执行了一半就崩溃了,此时计算机重启后会发现事务不完整就会将之前执行的一半的事务全部撤销不做(undo),以此来保证数据的完整性。
REDO操作:假设有2个事务,第一个事务已经完成,开始第二个事务执行到一半时崩溃了,计算机重启后,就会发现第一个事务已经完成,但还能没有写入数据库中,此时就会对第一个事务进行重做(REDO)将修改后的数据写入数据库中,而第二个执行了一半的事务则会撤销不做(UNDO)
事务的ACID特性A:atomicity原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚
C:consistency一致性;数据库总是从一个一致性状态转换为另一个一致性状态
I:Isolation隔离性;一个事务所做出的操作在提交之前,是不能为其他事务所见,隔离有多种隔离级别,实现并发
D:durab ...
MySQL的存储引擎
存储引擎决定了如何把数据库内的信息最终以某种方式转存在磁盘的数据库文件中,存储引擎用来管理磁盘上的各种不同文件。存储引擎在MySQL中是其特有的一种技术,在其他数据库中不提这个东西,Oracle、DB2、SQLserver这些商业级的数据库只有一种存储引擎,所以都不提存储引擎,而MySQL是个开源产品,所以很多的开发人员觉得某些存储引擎不好自己就开发一个,从而造成了MySQL的存储引擎特别的多。
MyISAM:MyISAM在5.5之前的版本中默认使用
MyISAM的存储引擎具有更好的性能
InnoDB:InnoDB在5.5之后的版本中默认使用
InnoDB的存储引擎具有很好的稳定性,支持事务和低级别的锁和外键
默认存储引擎的查看方法存储引擎可以在MySQL中使用SHOW ENGINES;命令进行查看,所列出来的都是系统所支持的存储引擎,带有default的表示系统默认使用的存储引擎。
1234567891011121314151617#查看所支持的所有存储引擎MariaDB [(none)]> SHOW ENGINES;+--------------------+------ ...
MySQL进程的查杀
MySQL查杀进程1.查看所要杀的进程编号
123456789101112131415MariaDB [hellodb]> SHOW PROCESSLIST;+----+-------------+-----------+---------+---------+------+---------------------------------+---------------------------------------------+----------+| Id | User | Host | db | Command | Time | State | Info | Progress |+----+-------------+-----------+---------+---------+------+---------------------------------+------------------------- ...