全文核心内容思维导图

第一部分:从入门到精通 | MySQL知识整理(上)
一、体系结构详解
客户机程序可以连接到在相同主机或不同主机上运行的服务器 客户机/服务器通信可以发生在计算机运行不同操作系统的环境中
为数据库建模 执行数据库查询 执行管理任务
连接层:处理连接,此层存在于所有服务器软件(Web服务器)上;
SQL层:SQL查询发送到所连接的应用程序处理;
存储层:处理数据存储,数据可以按不同格式和结构存储在不同物理介质上
TCP/IP;
UNIX套接字;
共享内存;
命名管道;
MyISAM:适用于频繁读取但很少更新的数据;
MEMORY:在内存中存储所有数据;
NDB:供MySQL Cluster用来为高可用性数据提供冗余的可伸缩拓扑
CREATE TABLE具有ENGINE选项,可基于每个表指定要使用的引擎;
ALTER TABLE具有ENGINE选项,允许将表转换为使用不同的存储引擎;
某些索引类型仅适用于特定存储引擎;例如,仅InnoDB和MyISAM引擎支持全文索引;
COMMIT和ROLLBACK操作仅影响事务存储引擎(例如InnoDB和NDB)管理的表;
数据文件:特定于存储引擎的数据文件,这些文件也可能包含元数据或索引信息,具体取决于所使用的存储引擎;
格式文件(.frm):包含每个表和/或视图结构的说明,位于相应的数据库目录中;
触发器:与某个表关联并在该表发生特定事件时激活的命名数据库对象;
全局(每实例内存):服务器启动时分配一次并在服务器关闭时释放,此内存在所有会话间共享;当所有物理内存用尽时,操作系统开始交换,这会对MySQL服务器性能具有不利影响,可能会导致服务器崩溃;
会话(每会话内存):基于每个会话(有时称为“线程”)动态进行分配;此内存可在会话结束时或不再需要会话时释放,此内存多用于处理查询结果,所使用的缓冲区大小基于每个连接;例如,read_buffer为10MB且具有100个连接意味着可能总共有100*10MB同时用于所有读取缓冲区;
可用于替换或扩充内置全文解析器的全文解析器插件;例如,某个插件可以使用不同于内置解析器所使用的规则将文本解析为字,要解析具有不同于内置解析器所预期的特征的文本,这很有用;
向服务器提供低级别存储,检索和数据索引的存储引擎;
信息模式插件;信息模式插件作为MySQL INFORMATION_SCHEMA数据库中的表出现,稍后将更详细地讨论INFORMATION_SCHEMA数据库;
守护进程插件启动在服务器内运行的后台进程(例如,定期执行心跳处理);
MySQL服务器分发
二进制文件分发:是预编译的,可以运行的程序,可用于Enterprise和Community MySQL Server版本,这些二进制文件是正式的经过Oracle测试的版本;
源代码分发:不保证与商业代码更新一致,它们也不包括Oracle支持;
MySQL二进制文件分发
RPM文件可用于基于RPM的Linux分发,例如Oracle Linux;通过使用rpm程序或者通过使用yum等软件包管理器来安装这些文件,每个RPM的安装布局由RPM文件自身内包含的规范文件提供;(使用rpm -qpl 来查看安装时RPM文件内容的位置)
TAR文件可用于多种Linux和UNIX类似系统,要安装这种类型的分发,使用.tar程序在安装目录中解压缩该分发;
完整分发:包含MySQL安装的所有文件以及配置向导。
非安装分发:.zip归档文件,不使用安装或配置向导,您只需解压缩该归档文件并将其移至所需的安装位置;
MySQL源代码分发
与分发无关:MySQL提供给社区的RPM,它们应该可以在支持RPM软件包并使用glibc 2.3的所有Linux版本上运行;(查看方式:ldd –version)
特定于分发:面向目标Linux平台,Oracle为许多平台提供了RPM文件;
MySQL-client-advanced-.rpm:客户端命令行工具;MySQL-devel-advanced-.rpm:包含了编译软件所需要的头文件,需要使用客户端共享库;MySQL-embedded-advanced-.rpm:嵌入式数据库,为移动智能设备使用;MySQL-server-advanced-.rpm:服务端(包含mysqld的二进制文件);MySQL-shared-advanced-.rpm:包含客户端的共享库(libmysqlclient.so*);MySQL-shared-compat-advanced-.rpm:包含了兼容旧版本的客户端共享库;MySQL-test-advanced-.rpm:包含了测试套件;
Linux MySQL RPM安装过程
将RPM文件提取到其默认位置;
在/etc/init.d目录中注册名为mysql的启动脚本;
执行mysql_install_db,即创建系统数据库和默认my.cnf文件的脚本,为root帐户设置随机口令并将该口令保存在安装用户主目录中名为.mysql_secret的文件中;
为mysql设置登录帐户以及用户名和组名称(用于管理和运行服务器);
删除原来的包:yum remove mysql-xxx
添加–replacefiles选项:rpm -ivh –replacefiles MySQL--advanced;
/usr/bin:客户端程序和脚本;/usr/sbin:mysqld服务程序;/var/lib/mysql:数据库和日志文件,之后讲到数据库结构会讲每个文件的作用;/usr/share/info:info格式的MySQL手册;/usr/share/man:标准的Unix man格式手册;/usr/include/mysql:MySQL所需的头文件;/usr/lib64/mysql:库文件;/usr/share/mysql:其它杂项,包括支持文件,错误信息,字符集文件,示例配置文件和数据库安装的SQL文件等;/usr/share/sql-bench:测试基线;/etc/my.cnf, usr/my.cnf:缺省配置文件;/etc/init.d/:包含了mysql启动脚本;/var/log:mysqld.log文件;
查看后台进程:ps -ef | grep mysql;
本来是启动的mysqld服务,后台多了一个mysqld_safe服务,之后讲数据库启动的几种方式会提到;
A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER !You will find that password in ‘/root/.mysql_secret’.You must change that password on your first connect,no other statement but ‘SET PASSWORD’ will be accepted.See the manual for the semantics of the ‘password expired’ flag.Also, the account for the anonymous user has been removed.
查看到密码后再登录:mysql -uroot -p;如何使用SET PASSWORD: help SET PASSWORD,发现报错,必须先修改:SET PASSWORD = PASSWORD(“mysql”);
查看安装了哪些软件:yum list | grep MySQL;删除软件:yum remove MySQL-*;
mysqld:手动调用服务器来调试MySQL服务器;默认情况下,错误消息传至终端,而不是错误日志;
mysqld_safe:设置错误日志,然后启动mysqld并对其进行监视,如果mysqld异常终止(kill -9 pid),mysqld_safe会将其重新启动;如果服务器未正常启动,请查看错误日志;
mysql.server:用作mysqld_safe的包装,针对使用System V运行级别目录的Linux和Oracle Solaris等系统;
mysqld_multi:该Perl脚本用于简化单台主机上的多个服务器管理,它可以启动或停止服务器,它还可以报告服务器是否正在运行;
其它:mysqladmin -uroot -p start;
在BSD样式的Linux系统上,最常见的是通过某一个系统启动脚本(例如/etc目录中的rc.local脚本)调用mysqld_safe;
在/etc/init.d下具有运行级别目录的Linux和UNIX System V变体使用mysql.server脚本,预先构建的 Linux二进制软件包针对相应的运行级别在名称mysql安装mysql.server;使用chkconfig注册服务;
在Linux上停止MySQL服务器
mysqladmin:具有关闭命令,它作为客户机连接到服务器并且可以关闭本地或远程服务器;
mysqladmin -uroot -p shutdown;mysql.server:在使用stop参数调用时停止和/或关闭本地服务器;
mysqld_multi:停止和/或关闭其管理的任何服务器,它通过调用mysqladmin来执行此操作;
提高安装安全性
数据目录
数据库和表名称仅在具有区分大小写的文件名的操作系统(例如大多数Linux系统)上的MySQL服务器中才区分大小写;
可以通过将数据目录,数据库和/或单个表(具体取决于存储引擎选项)移至不同的物理位置来分割磁盘使用,这可以提高性能;
MySQL服务器发行版
在关于升级的部分中,一定要阅读与正在执行的升级类型有关的注释,按照建议的过程执行操作;
在关于新版本的更改注释部分中,查看在当前版本与要安装的版本之间发生的所有更改,请注意不与当前版本向后兼容的所有更改;
如果使用通用Linux二进制文件进行升级,可以选择创建特定于新版本的目录来包含升级的发行版;
备份你的数据库;
关闭Server;
在已存版本上安装新版本MySQL;
启动Server;
检查升级的表
检查数据库中的所有表与MySQL服务器当前版本是否兼容性;
修复表中发现的所有问题以及可能的不兼容性;
升级系统表来添加新版本中可用的所有新特权或功能;
使用当前MySQL版本号标记所有已检查和已修复的表;
mysqlcheck –check-upgrade –all-databases –auto-repairmysql_fix_privilege_tables
1.停止服务:service mysql stop;2.备份文件:- 创建临时目录:mkdir tmp/mbackup;- 备份配置文件:cp etc/my.cnf tmp/mbackup/;- 备份数据文件:cp -rf /var/lib/mysql/ /tmp/mbackup/mysql;也可以用mysqldump/xtrabackup;3.删除软件:yum -y remove MySQL-*-advanced-5.6.25-1.el6.x86_64;(不推荐)4.安装软件:rpm -ivh –replacefiles MySQL-server-advanced-5.6.26-1.el6.x86_64.rpm MySQL-client-advanced-5.6.26-1.el6.x86_64.rpm;5.拷贝回配置文件:cp tmp/mbackup/my.cnf etc/my.cnf;6.尝试重启:service mysql restart;7.执行更新:mysql_upgrade -uroot -p;8.查看生成的更新文件并且尝试登录查看版本信息:less $MYSQL_DATADIR/mysql_upgrade_info;
使用多个服务器
shell> mysqld_multi start 3, 5
多个服务器选项
练习任务
$ mysql -uroot -p;mysql> CREATE DATABASE world_innodb;mysql> USE world_innodbmysql> SET autocommit=0;mysql> SOURCE labs/world_innodb.sql;mysql> SET autocommit=1; 为了提高运行速度,批量提交;
mysql> SHOW VARIABLES LIKE ‘datadir’\G
service mysql status;关闭/启动MySQL服务器;service mysql stop/start;
配置文件my.cnf
[mysqld]user=mysqlport = 3306socket = var/lib/mysql/mysql.sockdatadir = var/lib/mysqlcharacter-set-server=utf8server-id = 1max_connections = 5000max_connect_errors = 10table_open_cache = 4096event_scheduler = ONskip-name-resolvelower_case_table_names = 1max_allowed_packet = 64Mbinlog_cache_size = 32Mmax_heap_table_size = 256Mread_rnd_buffer_size = 64Msort_buffer_size = 256Mjoin_buffer_size = 512Mthread_cache_size = 300log_bin_trust_function_creators=1key_buffer_size = 256Mread_buffer_size = 32Mread_rnd_buffer_size = 128Mbulk_insert_buffer_size = 512Msql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES######READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLEtransaction_isolation = READ-COMMITTEDtmp_table_size = 512Mlog-bin=mysql-binbinlog_format=mixedexpire_logs_days = 15slow_query_log = 1slow_query_log_file = var/lib/mysql/slow.loglong_query_time = 5####### InnoDBinnodb_buffer_pool_size = 512Minnodb_thread_concurrency = 16innodb_flush_log_at_trx_commit = 2innodb_log_buffer_size = 32Minnodb_log_file_size = 1024Minnodb_log_files_in_group = 4innodb_max_dirty_pages_pct = 90innodb_lock_wait_timeout = 120#innodb_force_recovery=1[mysqldump]quickmax_allowed_packet = 64M[mysql]no-auto-rehash[myisamchk]key_buffer = 16Msort_buffer_size = 16Mread_buffer = 8Mwrite_buffer = 8M[mysqlhotcopy]interactive-timeout[mysqld_safe]open-files-limit = 65535log-error=/var/lib/mysql/mysqld.logpid-file=/var/lib/mysql/mysqld.pid
推荐文章 · 点击阅读




