欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 32_03 _mysql系列之三MySQL数据库基础及编译安装 有大用

image.png


MySQL 最早属于瑞典的 AB 公司,后来被 Sun 收购, Sun 又被 Oracle 收购


image.png

image.png


96年 MySQL 第一次问世


image.png

MySQL

 1) Speed 高性能

 2) Reliability 稳定性,可靠性

 3) Scalability 伸缩性 (有效的数据分区,可以几百台MySQL服务器联合起来工作)

 4) Ease of use 易用性

 5) Portability and Standards Compliance 体积短小,轻量级

 6) Multiuser  Support 多用户支持

 7) Internationalization 国际化能力,支持众多语言,支持众多的字符编码

 8) Wide Application Support 广泛的应用支持

            c,c++,java,perl,php,python,ruby        

            jdbc,odbc,.net 提供这些专用的驱动程序(连接器)

 9)Open Source 开源的


image.png


mysql 使用量超过了 sql server,紧跟在 Oracle 之后,( 但仅统计商业公司,如果所有公司都统计,会超过 oracle )


image.png

image.png

alpha: 内测版 

Beta: 测试版 

GA:  General Availability,通用版本,指软件的通用版本。


Subqueries :     子模询 嵌套查询

prepared statement :    预准备语句    准备语句    预备语句;可以编译框架,里面的数据可以进行替换

B-tree and R-tree indexes :  B树索引和R树索引

        B树索引:  平衡树索引

        R树索引:  空间树索引

Stored procedure: 存储过程

cursors: 游标

views: 视图

trigger: 触发器

XA transaction: 分布式事务

Partitioning:数据分区,表如果过大(比如10亿行数据,把一个表中的数据拆分成n份,每一个数据库物理服务器上只负责其中一部分查询);sharing 有相同之处,又有不同之处,很多时候不加区分的使用它们

row-based replication : 基于行的复制    Mysql 还能基于语句的复制,两种模式(基于行的复制,基于语句的复制)进行的混合复制

plug in storage engine API: 本来需要将引擎直接植入进源码编译进行工作,5.1后来,真正提供插件式存储引擎的抽象层,从此以后,切换引擎变得非常简单

event scheduler:  事件调度器


比较主流的稳定版已发展到  5.5 -->5.6

5.5在性能上有很大改进,(至少在windows上性能改进明显)

5.6的时候,引入了多线程复制等新特性


在技术上 mysql 不比 postgresql(postgresql在一些特性,尤其是错误恢复上比mysql强),但是市场决定一切


image.png


MySQL Server ( 要关心 ): C/S ,既包括C(mysql),又包括S (mysqld或 mysqld-safe)

MySQL Cluster : Mysql 集群 4节点  99.999在线(一年不超过5分钟当机)  但是基本没有公司使用它


MySQL Proxy ( 要关心 ) : Mysql 代理服务器  Mysql语句路由,前端代理接受用户请求,把请求转发给真正处理的Mysql服务器

           (读写分离)  , 写服务器专门进行写(创建,删除,修改,增加等等),写服务器根据Mysql自己的内部的复制功能,在内部同步数

            据到读服务器,,用户的select查询请求由 读服务器 响应

             Mysql 代理还能够分析重写SQL语句,能把用户经常用到的性能比较差的sql语句在服务器上重写为性能比较好的语句(对用户请求进行分析并重写)       MySQL Proxy仍然没有为生产环境做完整的测试,不推荐在生产环境中使用,好多商业公司使用 MySQL Proxy 来实现读写分离等功能的

        阿里巴巴有个员工好像了实现了类似于 MySQL Proxy的工具


MySQL Administrator (按需定义的) : Mysql 的  GUI  可视化管理工具

MySQL Query Browser  (按需定义的) : Mysql 的 查询浏览器

MySQL Workbench  (按需定义的) : 数据设计工具

MySQL Migration Toolkit ( 要关心 ) :  MySQL 移植工具箱 (能够将 access (sql server ) 数据库导入到mysql中去,反之,也可以)(可在mysql不同版本,不同平台(window linux)之间移值数据)

MySQL Embedded Server : 嵌入式环境中专用的(工作地址小,内存地址小)在可获取的资源量很小的情况下,只提供基本的功能

MySQL Drivers and Connectors ( 要关心 ) : 驱动和连接器


image.png


商业版(企业版): 提供了更增强的监控工具,更增强的商业级的工具

        我们不依赖于这些工具,也能完成相应的工作

        使用企业版的公司太少了


社区版(免费版):对绝大多部公司来讲,够用



Percona 为  Mysql  提供性能优化的著名的组织,里面提供了Mysql的性能博客,提出了Mysql的性能改进,

里面有许许多多有价值的文章,关于性能优化的内容,大多数来自 Percona,应经常关注Percona的站点



image.png

image.png


image.png


https://www.percona.com/

https://www.percona.com/community-blog/


image.png

image.png


image.png

image.png


image.png


MySQL安装:

    专用软件包管理器包

            deb(dig或ubunt上用的),rpm(红帽 Cento Suse上用的)

            rpm:

                    RHEL(Oracle Linux),CentOS

                    SUSE

            rpm 包 也有两种,一种是红帽操作系统做的,另一种是Mysql官方做的

    通用二进制格式包

            gcc,icc  在某一个通用平台上使用 gcc (geno的C编译器)或icc (因特尔的C编译器) 编译器编译的 ,一般我们使用gcc的

                    gcc: x86(i386或i686格式),x64(64格式的),(sun的spark平台的版本)

    源代码

            5.5之前(不含5.5),一般使用make编译(./configure, make, make install)

            5.5之后(含5.5),不使用make,使用 cmake (c就是 cross  platform 跨平台) 跨平台的编译器,不依赖于平台来进行编译

                    cmake(针对同一个源代码树,编译多个不同的版本,可以编译32位,或64位, 或 power pc 版本,编译后的结果,其位置与源码不在同一个位置)

                    5.6比5.5特性,性能更强,当然低版本(5.5)更稳定

            红帽5上未提供cmake,需额外安装cmake编译器,红帽6.0及之后默认提供cmake

            



image.png


image.png


MySQL-client: mysql ,mysqladmin 等等

MySQL-debuginfo: 当客户端或服务器端有问题时,打开调试代码追踪代码执行的(一般只有开发人员才用得上,高级的dba,追踪,分析mysql性能问题时)

MySQL-devel: 开发组件(开发时用到的头文件,库文件,才用得上)(二次开发,针对mysql开发其它产品,都有可能用得上)(如果编译一个软件,这个软件依赖于mysql的话,必须安装这个mysql-devel)

MySQL-embedded: 嵌入式环境中专用的 (红帽系统上,装mysql服务器,平时用不上它)

MySQL-ndb-management: MySQL集群服务器上专用的 ndb(name db) (平时也用不上)

MySQL-server: 服务器端

MySQL-shared: 共享库,(MySQL-client,MySQL-server都有可能用到)

MySQL-shared-compat: 兼容比较老的mysql客户端服务器端工具而专门提供的兼容库,是MySQL-shared的补充

MySQL-test: 测试组件

MySQL-VERSION.PLATFORM.src.rpm: 源码格式的rpm包

所以我们要装 MySQL-client,MySQL-devel,Mysql-server,MySQL-shared,MySQL-shared-compat 一般就够了,偶尔需要装 MySQL-test



Mysql安装后的目录结构

image.png



bin: Mysql 各种二进制程序,包括服务器端客户端

data: 数据目录

include: 头文件

lib: 库文件

man: 手册

mysql-test: 测试组件

scripts: 初始化脚本( 只有一个脚本 master install db , 初始化 mysql 字典的, 初始化 mysql 的控制信息数据库 mysql )

share: 每一种相关信息(错误)的不同语言版本               

sql-bench: 基本性能测试所用到的工具包(安装完mysql,测它的响应能力,负载能力)

support-files:    给mysql提供启动服务脚本,主配置文件,主配置文件的样例等等


Mysql 安装完成后,如何完成初始配置的

image.png

mysql安装完成后,必须初始化,完成配置

    mysql 中心配置文件 my.cnf,

        [mysql]            #只对mysql这个程序生效,只为mysql这个组件客户端使用

                ................

        [mysqld]          #只对mysqld这个程序生效  服务器端   

                ................

        [client]          # 只对client这个程序生效  客户端;为众多客户端组件共同使用的

                ................


image.png


mysql从哪个路径找配置文件 到下列多个路径找 ,按顺序找的

在类Unix(包括linux)

1)/etc/my.cnf

2)/etc/mysql/my.cnf

3)$MYSQL_HOME/my.cnf  # mysql家目录(实例运行目录)

        一个物理服务器上,可以提供多个web虚拟主机,也可以提供多个不同的mysql服务器,只要它们监听在不同的端口上(每一个工作在不同端口上的mysql服务,我们称为mysql实例,每一个实例都有它自己的运行目录,都叫做 $MYSQL_HOME )

4)/path/to/file 启动mysql的时候,可以通过 defaults-extra-file=/path/to/file 指定额外的配置文件 

5)~/my.cnf  用户家目录下的 my.cnf , 运行mysql用户服务器的用户就叫做 mysql,如果 mysql 没有家目录的话, 就找不到它

每次mysql启动的时候,它都会读取这四个或五个文件

若多个文件有重复的配置,那么最后一次读取的配置会生效

所以 5)优先级最高   1)优先级最低


image.png


mysql 在 windows 上加载配置文件的顺序

image.png



1) %WINDIR%\my.ini,%WINDIR%\my.cnf

2) C:\my.ini,C:\my.cnf

3) %INSTALLDIR%\my.ini, %INSTALDIR%\my.cnf

4) /path/to/file 启动mysql的时候,可以通过 defaults-extra-file=/path/to/file 指定额外的配置文件 



mysql 安装完成后进行的操作


image.png

mysql 安装完成后 默认生成5个用户,

三个root 

        root@127.0.0.1    root@localhot    root@hostname

        密码默认就是空的

两个anonymous 

        ''@localhot    ''@hostname

        匿名不安全,我们应该删除

image.png

drop user 用户名@主机名    #删除用户

Mysql 密码修改方法有三种

1) 改密码:    mysqladmin -u root password 'new-password' -p   # password 是 mysql 的一个子命令,专门用来设定密码的  (-p 是指定老密码,如果以前是空密码-p也不用指了)               一般此命令完成后会自动重读授权表,

    改密码:    mysqladmin -u root -h this_host_name password 'new-password' -p 

     

2)mysql> SET PASSWORD FOR 'USERNAME'@'HOST'=PASSWORD('new_pass')            一般此命令完成后会自动重读授权表,

3)mysql> UPDATE mysql.user SET PASSWORD=PASSWORD('new_pass') WHERE CONDITION;

             >  FLUSH PRIVILEGES; 告诉mysql,去重读授权表,



MySQL安装:

        源码安装MySQL (5.5)

                    cmake ( 先安装它 ) ( 红帽6才 cmake , 红帽5上是没有的 )

                            编译安装 cmake  (使用 make工具安装, 开发环境,开发工具?)



安装 Mysql时

        1)数据要安装在独立的目录,最好把数据安装在独立的LVM(逻辑卷)上

        2)准备用户

        3)把数据目录的属主属组改为 mysql用户

        4)编译安装mysql

image.png

image.png

image.png

1) 

./configure                        cmake .

./configure --help             cmake . -LH or ccmake

2)

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql          cmake 编译软件时,指定的软件的安装路径(编译mysql时,默认就是它)

-DMYSQL_DATADIR=/data/mysql                     数据文件的路径 ( 默认是 /usr/local/mysql/data )

-DSYSCONFDIR=/etc                                          配置文件的路径


Mysql 5.5 上默认的存储引擎: csv myisam myisammrg heap ( 5.6上默认包含 innodb )

编译存储引擎

-DWITH_INNOBASE_STORAGE_ENGINE=1  #编译的时候,使用INNODB存储引擎 (5.5上应该装进来,尤其是它)

-DWITH_ARCHIVE_STORAGE_ENGINE=1        #  (5.5上应该装进来)

-DWITH_BLACKHOLE_STORAGE_ENGINE=1    #黑洞存储引擎  (5.5上应该装进来)

-DWITH_FEDERATED_STORAGE_ENGINE=1     #联合存储引擎 (应该是5.5中不支持?不知道,倒底支不支持)


不编译存储引擎

-DWITHOUT_<ENGINE>_STORAGE_ENGINE=1  

比如:

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1        

-DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1    

-DWITHOUT_PARTITION_STORAGE_ENGINE=1       



-DWITH_READLINE=1        #  能够使用 load in file 这种方式来批量导入 mysql 数据的(非常重要,应该包含)

-DWITH_SSL=system         #  支持基于 ssl 的会话,实现复制的功能至关重要 (应该包含)

-DWITH_ZLIB=system        #  压缩库,可以根据系统进行选择 

-DWITH_LIBWRAP=0         #  编译 mysql 的时候,针对 tcpwrapper 进行编译,意味着 mysql 是可以通过tcpwrapper来进行控制的 ( 对于msyql这样复杂的数据库来讲,这个不需要编译 )


-DMYSQL_TCP_PORT=3306                       设置默认端口的 

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock           MySQL进程间通信的套接字的位置 

-DENABLED_LOCAL_INFILE=1                    是否启动本地的LOCAL_INFILE 

-DEXTRA_CHARSETS=all                        支持哪些额外的字符集 

-DDEFAULT_CHARSET=utf8                      默认字符集 

-DDEFAULT_COLLATION=utf8_general_ci         默认的字符集排序规则 (就算是utf-8中文,可能按笔画排序,可能按拼音排序)

-DWITH_DEBUG=0                              是否启动DEBUG功能 

-DENABLE_PROFILING=1                        是否启用性能分析功能



看看开发环境 开发库

image.png



image.png


image.png

image.png


image.png


image.png


https://download.csdn.net/download/u012181236/9550772

https://github.com/Kitware/CMake/releases?after=v3.17.3

https://cmake.org/cmake/help/latest/release/index.html

https://cmake.org

以上都可以下载 历史版本 cmake


https://downloads.mysql.com/archives/community/     

https://dev.mysql.com/downloads/mysql/  

下载历史版本  mysql 上面是rpm,源码包都有


https://downloads.mysql.com/archives/get/p/23/file/mysql-5.5.28.tar.gz


[root@mail ~]# man hwclock

[root@mail ~]# hwclock -s


[root@mail ~]# tar xf cmake-2.8.8.tar.gz

[root@mail ~]# tar -xf  mysql-5.5.28.tar.gz



[root@mail ~]# cd cmake-2.8.8

[root@mail cmake-2.8.8]#


[root@mail cmake-2.8.8]# ./configure --help | less

[root@mail cmake-2.8.8]# ./configure 

......................

......................

......................

应该默认装在 /usr/local/bin 吧


[root@mail cmake-2.8.8]# make && make install



创建逻辑卷 (我的电脑上 不能建逻辑器,看马哥的吧)

image.png

image.png

image.png

image.png


image.png

image.png

image.png


有人说mysql数据 放在 fxs 文件系统上性能最好

image.png

lost+found 说明是一个新分区


image.png


[root@mail data]# cd

[root@mail ~]# cd /mydata/data

[root@mail data]#




[root@mail data]# chown -R mysql:mysql /mydata/data

[root@mail data]#




[root@mail ~]# which cmake

/usr/local/bin/cmake

[root@mail ~]# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/apache/bin:/usr/local/mysql/bin:/root/bin

[root@mail ~]#


[root@mail ~]# cd mysql-5.5.28

[root@mail mysql-5.5.28]# pwd

/root/mysql-5.5.28

[root@mail mysql-5.5.28]#




[root@mail mysql-5.5.28]# cmake . -LH    #是看帮助命令     比下面命令更好 (尝试编译,读取配置选项)

或者 

[root@mail mysql-5.5.28]# ccmake .     #也是看帮助命令



  cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  #安装路径

-DMYSQL_DATADIR=/mydata/data \  #数据路径

-DSYSCONFDIR=/etc \  #配置文件路径

-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #innodb存储引擎

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #archive存储引擎

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #黑洞存储引擎 相当于/dev/null 偶尔比如中继复制时有用

-DWITH_PARTITION_STORAGE_ENGINE=1\

-DWITH_PERFSCHEMA_STORAGE_ENGINE=1\

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \

-DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DWITH_EXTRA_CHARSETS=all \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_READLINE=1 \

-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ # unix套接字路径

-DMYSQL_TCP_PORT=3306 \

-DMYSQL_USER=mysql \

-DCOMPILATION_COMMENT="lq-edition"\

-DWITH_BOOST=/usr/local/boost \

-DENABLE_DTRACE=0 \

-DOPTIMIZER_TRACE=1\

-DWITH_DEBUG=1


上面其实默认都有,不加也没关系


[root@mail mysql-5.5.28]#   cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ 

-DMYSQL_DATADIR=/mydata/data \ 

-DSYSCONFDIR=/etc \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \ 

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ 

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DWITH_SSL=system \

-DWITH_ZLIB=system \

-DWITH_LIBWRAP=0 \

-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \

-DDEFAULT_CHARSET=utf8 \   # 这个马哥没加,我也不加吧

-DDEFAULT_COLLATION=utf8_general_ci \  # 这个马哥没加,我也不加吧


[root@mail mysql-5.5.28]# make

[root@mail mysql-5.5.28]# make install




image.png


mysql 是C/S的

本地通信,是套接字 socket

非本地通信(哪怕可能用的是本机的ip地址,只要不是本地回环地址127.0.0.1),也是 tcp/ip通信 


image.png


mysql三个组件, 服务器端工具,客户端工具,非客户端工具

image.png

mysql客户端工具

image.png


MySQL客户端工具:

    mysql

    mysqldump

    mysqladmin

    mysqlcheck

    mysqlimport

        

        [client]            #配置文件client段对它们生效

        客户端工具选项几乎相同 ,都有长选项

        -u USERNAME   (--username)

        -h HOST    (--host)

        -p '' #密码  (--password)

        


        --protocol  {tcp|socket|pipe|memory}      # socket是linux上 pipe|memory是windows上

        --port PORT #端口




image.png

image.png

MySQL非客户端组件:

image.png

image.png




MySQL非客户端组件(工具):

    myisamchk    #检查myisam表

    myisampack    #打包压缩myisam表



[root@mail mysql-5.5.28]# cd /usr/local/mysql

这里安装完成的结果,与通用二进制格式安装以后的结果基本是一样的

[root@mail mysql]#

[root@mail mysql]# ls

bin      data  include         lib  mysql-test  scripts  sql-bench

COPYING  docs  INSTALL-BINARY  man  README      share    support-files

[root@mail mysql]#


[root@mail mysql]# ll

总计 132

drwxr-xr-x  2 root root  4096 09-15 12:27 bin

-rw-r--r--  1 root root 17987 2012-08-29 COPYING

drwxr-xr-x  4 root root  4096 09-15 12:26 data

drwxr-xr-x  2 root root  4096 09-15 12:26 docs

drwxr-xr-x  3 root root  4096 09-15 12:26 include

-rw-r--r--  1 root root  7604 2012-08-29 INSTALL-BINARY

drwxr-xr-x  3 root root  4096 09-15 12:27 lib

drwxr-xr-x  4 root root  4096 09-15 12:27 man

drwxr-xr-x 10 root root  4096 09-15 12:27 mysql-test

-rw-r--r--  1 root root  2552 2012-08-29 README

drwxr-xr-x  2 root root  4096 09-15 12:27 scripts

drwxr-xr-x 27 root root  4096 09-15 12:27 share

drwxr-xr-x  4 root root  4096 09-15 12:27 sql-bench

drwxr-xr-x  2 root root  4096 09-15 12:27 support-files

[root@mail mysql]# 


[root@mail mysql]# chown -R :mysql /usr/local/mysql  #属主改为mysql

[root@mail mysql]#


初始化 mysql 数据库


[root@mail mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data


复制配置文件

[root@mail mysql]# cp support-files/my-large.cnf /etc/my.cnf

[root@mail mysql]#


复制启动进程脚本文件

[root@mail mysql]# cp support-files/mysql.server /etc/init.d/mysqld

[root@mail mysql]#


加到服务列表中去

[root@mail mysql]# chkconfig --add mysqld

[root@mail mysql]#


看看 mysqld 在什么情况下启动  2 3 4 5 是 on 

[root@mail mysql]# chkconfig --list mysqld   

mysqld          0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

[root@mail mysql]#


启动 mysql

[root@mail mysql]# service mysqld start

Starting MySQL..The server quit without updating PID file (/mydata/data/mail.magedu.com.pid).                                              [失败]


到 /mydata/data 目录看看错误日志 mail.magedu.com.err

[root@mail mysql]#

[root@mail data]# tail mail.magedu.com.err   #看下面,原来还有一个mysqld ,,我们本来是卸载掉它的,它这个服务还未停止,

                                # 我们就 重启下电脑吧

200915 13:13:37 [Note] Server socket created on IP: '0.0.0.0'.

200915 13:13:37 [ERROR] Can't start server : Bind on unix socket: Permission den

200915 13:13:37 [ERROR] Do you already have another mysqld server running on soc

200915 13:13:37 [ERROR] Aborting


200915 13:13:37  InnoDB: Starting shutdown...

200915 13:13:38  InnoDB: Shutdown completed; log sequence number 1595675

200915 13:13:38 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete


200915 13:13:38 mysqld_safe mysqld from pid file /mydata/data/mail.magedu.com.pi


[root@mail data]# tail -1000 /mydata/data/mail.magedu.com.err  

  # 看到这里 权限拒绝

image.png


[root@mail local]# chown -R mysql:mysql /usr/local/mysql

[root@mail local]# chown -R mysql:mysql /mydata/data/

上面两个命令执行后,mysql就能启动了



[root@mail local]# service mysqld restart

MySQL server PID file could not be found!                  [失败]

Starting MySQL..                                           [确定]



把mysql命令路径直接加到环境变量中

[root@mail data]# vim /etc/profile.d/mysql.sh

export PATH=$PATH:/usr/local/mysql/bin


执行此脚本,让它即时生效

[root@mail data]# . /etc/profile.d/mysql.sh

[root@mail data]#


[root@mail data]# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/apache/bin:/usr/local/mysql/bin:/root/bin:/usr/local/mysql/bin

[root@mail data]#



[root@mail data]# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.5.28-log Source distribution


Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.



mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+

4 rows in set (0.00 sec)


mysql>


mysql> show engines;  #显示存储引擎

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |

| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |

| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |

| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |

| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |

| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |

| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |

| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

8 rows in set (0.00 sec)


mysql>



[root@mail data]# vim /etc/my.cnf

thread_concurrency = 8  # 最好为内核个数的双倍,性能更好

datadir = /mydata/data   #源码安装,不指定不会报错,通用二进制格式不指定就会报错了


[root@mail data]# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 4

Server version: 5.5.28-log Source distribution


Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

#下面代码是删除两个用户

mysql> DROP USER ''@localhost;

mysql> DROP USER ''@'127.0.0.1';

ERROR 1396 (HY000): Operation DROP USER failed for ''@'127.0.0.1'

mysql>

mysql> select User,Host,Password FROM user;

+------+-----------------+----------+

| User | Host            | Password |

+------+-----------------+----------+

| root | localhost       |          |

| root | mail.magedu.com |          |

| root | 127.0.0.1       |          |

| root | ::1             |          |         # ipv6的本地回环用户

|      | mail.magedu.com |          |

+------+-----------------+----------+

5 rows in set (0.00 sec)


mysql>

mysql> DROP USER ''@mail.magedu.com;

Query OK, 0 rows affected (0.00 sec)


mysql>

mysql> DROP USER 'root'@'::1';

Query OK, 0 rows affected (0.00 sec)


mysql>

mysql> select User,Host,Password FROM user;

+------+-----------------+----------+

| User | Host            | Password |

+------+-----------------+----------+

| root | localhost       |          |

| root | mail.magedu.com |          |

| root | 127.0.0.1       |          |

+------+-----------------+----------+

3 rows in set (0.00 sec)

# 这里的Host 指的是客户端,即允许哪些客户端


mysql>

mysql> UPDATE user SET Password=PASSWORD('111111') where user='root';  #三个同时改

Query OK, 0 rows affected (0.00 sec)

Rows matched: 3  Changed: 0  Warnings: 0


mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)


mysql>

mysql> QUIT;

Bye

[root@mail data]#


[root@mail data]# mysql        #因为有了密码 所以此时连不上了

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

[root@mail data]#


[root@mail data]# mysql -uroot -h192.168.0.75 -p    #连不上,因为只允许本机连接

Enter password:

ERROR 1130 (HY000): Host '192.168.0.75' is not allowed to connect to this MySQL server

[root@mail data]#


[root@mail data]# mysql -uroot  -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 8

Server version: 5.5.28-log Source distribution


Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql>



自己直接使用 mysql (不用用户名和密码)

.my.cnf  在家目录下(root家目录),是隐藏文件,不能让别人有权限访问

[root@mail ~]# vim .my.cnf

[client]

user=root

password=zhong1926

host=localhost



[root@mail ~]# mysql        #此时mysql直接连进来了 (虽然它有密码)

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 10

Server version: 5.5.28-log Source distribution


Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql>


[root@mail ~]# cd /mydata/data

[root@mail data]# ls            # 每个数据库都有个目录

ibdata1              mysql-bin.000001  mysql-bin.000007  mysql-bin.000013  mysql-bin.000019

ib_logfile0          mysql-bin.000002  mysql-bin.000008  mysql-bin.000014  mysql-bin.index

ib_logfile1          mysql-bin.000003  mysql-bin.000009  mysql-bin.000015  performance_schema

mail.magedu.com.err  mysql-bin.000004  mysql-bin.000010  mysql-bin.000016  test

mail.magedu.com.pid  mysql-bin.000005  mysql-bin.000011  mysql-bin.000017

mysql                mysql-bin.000006  mysql-bin.000012  mysql-bin.000018


[root@mail mysql]# pwd

/mydata/data/mysql

[root@mail mysql]#

[root@mail data]# cd mysql

[root@mail mysql]# ls

columns_priv.frm   help_keyword.frm      proc.frm          time_zone.frm

columns_priv.MYD   help_keyword.MYD      proc.MYD          time_zone_leap_second.frm

columns_priv.MYI   help_keyword.MYI      proc.MYI          time_zone_leap_second.MYD

db.frm             help_relation.frm     procs_priv.frm    time_zone_leap_second.MYI

db.MYD             help_relation.MYD     procs_priv.MYD    time_zone.MYD

db.MYI             help_relation.MYI     procs_priv.MYI    time_zone.MYI

event.frm          help_topic.frm        proxies_priv.frm  time_zone_name.frm

event.MYD          help_topic.MYD        proxies_priv.MYD  time_zone_name.MYD

event.MYI          help_topic.MYI        proxies_priv.MYI  time_zone_name.MYI

func.frm           host.frm              servers.frm       time_zone_transition.frm

func.MYD           host.MYD              servers.MYD       time_zone_transition.MYD

func.MYI           host.MYI              servers.MYI       time_zone_transition.MYI

general_log.CSM    ndb_binlog_index.frm  slow_log.CSM      time_zone_transition_type.frm

general_log.CSV    ndb_binlog_index.MYD  slow_log.CSV      time_zone_transition_type.MYD

general_log.frm    ndb_binlog_index.MYI  slow_log.frm      time_zone_transition_type.MYI

help_category.frm  plugin.frm            tables_priv.frm   user.frm

help_category.MYD  plugin.MYD            tables_priv.MYD   user.MYD

help_category.MYI  plugin.MYI            tables_priv.MYI   user.MYI

[root@mail mysql]#


对于MyISAM引擎来说:    

        每表三个文件

    .frm 是表结构定义

    .MYD 就是 data 数据

    .MYI 是索引


InnoDB:

    每表都有表定义,,所有表数据放在一个单独的表空间当中(同一个文件里面),(可以定义为每表单独的表空间文件)

    所有表共享一个表空间文件    

    建议每表一个独立的表空间文件

 .frm 是表结构定义

 .ibd 表空间 (表数据和表索引)

 .opt  默认字符集和排序规则的定义


    


[root@mail mysql]# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 11

Server version: 5.5.28-log Source distribution


Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> show variables like '%innobd%' ;

Empty set (0.00 sec)


mysql> 

mysql> show variables like '%innodb%' ;  #会话变量

        #  show global variables like '%innodb%' ; 全局变量

# innodb_file_per_table 是 OFF  ;可以临时有效改成ON,想永久生效,

[mysqld] 下面 

innodb_file_per_table = 1      #  (ON)


[root@mail local]# vim /etc/my.cnf

[mysqld] 

innodb_file_per_table = 1


[root@mail local]# service mysqld restart

Shutting down MySQL...                                     [确定]

Starting MySQL..                                           [确定]

[root@mail local]#


[root@mail mysql]# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 11

Server version: 5.5.28-log Source distribution


Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> show variables like '%innobd%' ;

# 此时   innodb_file_per_table   是 ON  


大部分选项 可以直接修改,不用重启服务器的




mysql> create database mydb;

Query OK, 1 row affected (0.00 sec)


mysql> create table  testdb(

    -> id int not null,

    -> name char(30));

Query OK, 0 rows affected (0.02 sec)


mysql>



[root@mail mysql]# pwd

/mydata/data/mysql

[root@mail mysql]# cd ..

[root@mail data]# pwd

/mydata/data

[root@mail data]# ls        # 有个叫mydb 的数据库

ibdata1              mysql             mysql-bin.000006  mysql-bin.000012  mysql-bin.000018

ib_logfile0          mysql-bin.000001  mysql-bin.000007  mysql-bin.000013  mysql-bin.000019

ib_logfile1          mysql-bin.000002  mysql-bin.000008  mysql-bin.000014  mysql-bin.000020

mail.magedu.com.err  mysql-bin.000003  mysql-bin.000009  mysql-bin.000015  mysql-bin.index

mail.magedu.com.pid  mysql-bin.000004  mysql-bin.000010  mysql-bin.000016  performance_schema

mydb                 mysql-bin.000005  mysql-bin.000011  mysql-bin.000017  test

[root@mail data]#


[root@mail data]# cd mydb

[root@mail mydb]# pwd

/mydata/data/mydb

[root@mail mydb]# ls

db.opt  testdb.frm  testdb.ibd

[root@mail mydb]#

[root@mail mydb]# ls -lh

总计 128K

-rw-rw---- 1 mysql mysql   65 09-15 16:01 db.opt

-rw-rw---- 1 mysql mysql 8.4K 09-15 16:03 testdb.frm

-rw-rw---- 1 mysql mysql  96K 09-15 16:03 testdb.ibd        #它有初始数据的

[root@mail mydb]#

[root@mail mydb]# file db.opt

db.opt: ASCII text

[root@mail mydb]# cat db.opt

default-character-set=latin1

default-collation=latin1_swedish_ci

[root@mail mydb]#


普通分类: