当前位置:Gxlcms > 数据库问题 > Linux MYSQL 数据库

Linux MYSQL 数据库

时间:2021-07-01 10:21:17 帮助过:18人阅读

1.1.概述:

DBMS

 datebase management system  数据库管理系统

 

DML:date manapulate lanaguage  数据操作语言

  

   INSERT,REPLACE,UPDATE,DELETE

 

DLL: Date Defination Lanauage 数据定义语言

  

   CREATE,创建数据库 ALTER,修改数据库 DROP 删除数据库和表

 

DCL:Date Control Language 数据控制语言

 

常用数据库软件

  • Oracle   世界三大

  • Sybase

  • Infomix

  • SQL Server     sybasemicrsoft共同开发

  • MySQL

  • PostgreSQL

  • pgsql

  • EnterpriseDB   redhat注资

 

 MySQL,SQL 瑞典   MySQL AB 作者女儿名字命名 

  

MYSQL事务工作原理:

可以能保证你做的一系列动作,要么全部成功。如果有一个操作失败,就回退到修改前。 

比如你要做下面几个操作:

1.删除表A中的某些记录;

2.B添加一些记录;

3.修改C表中的一些数据;

-------------------------

使用事务,如果1,2都成功了,3却失败了。

就会回退到第1步执行前的样子,ABC表都没被修改。   

 

1.2.索引

 

表索引:相当于一个表的目录 可以加快速度访问

1)    普通索引

2)    唯一索引

3)    主索引

4)    外键索引

5)    复合索引

 

# 数据库文件路径

mysql> show variables link ‘%datadir%‘;

 

1.3.mysql安装

 

1.3.1.mysql源码安装

 

wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz

tar xzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63

./configure --prefix=/usr/local/mysql  --enable-assembler && make -j8 &&  make -j8 install

 

--enable-assembler      # 使用某些字符串的汇编器版本

 

安装报错: checkingfor termcap functions library... configure: error: No curses/termcap libraryfound

解决方法: yum install ncurses-devel  -y

 

1. 设置服务

配置MYSQL服务为系统服务

cp/usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

cp/usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld

2. 设置开机启动

chkconfig --add mysqld              # 增加服务

chkconfig --level 345 mysqld on       # 增加开机项

3. 建立系统账号

useradd mysql

4. 过入mysql安装目录

cd /usr/local/mysql

chown -R mysql.mysql/usr/local/mysql    # 将安装目录所有者权限设为mysql用户

/usr/local/mysql/bin/mysql_install_db--user=mysql --datadir=/usr/local/mysql/var --basedir=/usr/local/mysql   # 初始化数据库    --datadir=指定数据目录   --basedir=指定数据基础目录

chown -R mysql.mysql var     # 修改var所有者

/usr/local/mysql/bin/mysqld_safe --user=mysql &    # 服务后台启动

 

5.5以上版本安装方式:

 

rm -rf /data/mysql/*
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql--user=mysql

bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &

 

安装依赖:yum -yinstall gcc-c++ cmake ncurses-devel

 

useradd mysql

 

mkdir -p /data/mysql

chown -R mysql:mysql /data/mysql

 

cmake .-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \

-DMYSQL_DATADIR=/data/mysql \

-DSYSCONFDIR=/etc \

-DMYSQL_USER=mysql \

-DMYSQL_TCP_PORT=3306 \

-DWITH_XTRADB_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_EXTRA_CHARSETS=1 \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DEXTRA_CHARSETS=all \

-DWITH_BIG_TABLES=1 \

-DWITH_DEBUG=0

 

&& make && make install

 

初始化

cd /usr/local/mysql

./scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysql --datadir=/data/mysql

 

添加服务

cp ./support-files/mysql.server/etc/rc.d/init.d/mysqld

chmod 755 /etc/init.d/mysqld

chkconfig mysqld on

 

修改启动服务

vi /etc/rc.d/init.d/mysqld

basedir=/usr/local/mysql

datadir=/data/mysql

:wq!

 

修改配置文件

vim /etc/my.cnf

datadir=/data/mysql

:wq

 

service mysqld start

 

添加环境变量

vi /etc/profile

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

:wq!

 

添加sock

source /etc/profile

ln -s /var/lib/mysql/mysql.sock /tmp/

 

安装报错:

 Curses library not found.  Please install appropriate package,

 

按照错误提示,Debian/Ubuntu下需要安装libncurses5-devRedhat下需要安装ncurses-devel ,检查是否安装了ncurses包,如下所示,已经安装了ncurses-5.5-24.20060715,但是缺少ncurses-devel包。

 

yum install ncurses-devel -y

 

安装了ncurses-devel包后,删除CMakeCache.txt,然后重新编译,编译成功,问题解决!

 

预编译:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/-DMYSQL_DATADIR=/home/mysql/data/ -DEFAULT_CHARSET=utf8 -DMYSQL_TCP_PORT=3306-DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DWITH_DEBUG=0 -DWITH_INNOBASE_STORAGE_ENGINE=1-DMYSQL_USER=mysql

make && make install

 

这些参数的意思:
-DCMAKE_INSTALL_PREFIX=/data/mysql 准备安装到那里
-DEFAULT_CHARSET=utf8 默认的字符集
-DMYSQL_TCP_PORT=3306 数据库的监听端口
-DMYSQL_UNIX_ADDR=/tmp/mysql3306.sock 本机连回数据库的unix socket
-DWITH_DEBUG=0 关闭debug模式
-DWITH_INNOBASE_STORAGE_ENGINE=1 打开innodb引擎

 

项目删除:CMake 默认不提供uninstall 这个 target,想要的话,输入:

xargs rm < install_manifest.txt

 

1.3.2.Yum安装

yum  install -y  mysql mysql-devel mysql-server mysql-libs

 

安装依赖包

-----------------------------------------------------------------------------------------------------------------------------

Installing:

 mysql-server         i686     5.1.73-5.el6_7.1      updates        8.8 M

Installing for dependencies:

 mysql               i686     5.1.73-5.el6_7.1       updates        904 k

 perl-DBD-MySQL     i686      4.013-3.el6          base          134 k

 perl-DBI             i686         1.609-4.el6         base         705 k

Updating for dependencies:

 mysql-libs             i686      5.1.73-5.el6_7.1       updates       1.2 M

---------------------------------------------------------------------------------------------------------------------------------

 

二进制程序:mysql  mysqld 可执行程序

 

RDBMS:

 /var/lib/mysql/     数据库默认路径

 

yum install mysql-server -y

 

初始化mysql 首次安装会自动初始化

 

1.4.服务与端口

 

service mysql  restart

service mysqld  restart

# 重启和停止服务

/etc/init.d/mysqld stop

 

端口tcp:3306

 

/usr/local/mysql/share/mysql.server stop –socket=/var/lib/mysql/mysql.sock&  启动后台服务

 

/usr/loacl/mysql/bin/mysql/mysql.serverstop   停止源码mysql服务

 

1.5.配置文件 /etc/my.conf

[mysqld]                                        // 服务器端配置

 datadir=/data/mysql                           // 数据目录

 socket=/var/lib/mysql/mysql.sock //socket         // 通信设置 

 user=mysql                                       // 使用mysql用户启动

symbolic-links=0                                  // 是否支持快捷方式

 log-bin=mysql-bin                                // 开启bin-log日志

 server-id = 1                                     // mysql服务ID

 auto_increment_offset=1                          // 1~65535 自增长字段

 auto_increment_increment=2                      // 1~65535 自增长字段每次递增的量 默认为1

(mysql中有自增长字段,在做数据库的主主同步时需要设置自增长的两个相关配置:

在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2,这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。)

 [mysqld_safe]                                      // mysql服务安全启动配置

 log-error=/var/log/mysqld.log 

 pid-file=/var/run/mysqld/mysqld.pid  

 replicate-do-db =jfedu                             // 允许slave同步哪个库

 key_buffer_size=16M                 指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般为内存的50% show variables like ‘key_buffer_size‘;查询缓冲大小

max_connections = 3000              # 每个客户端连接最大的错误允许数量,如果达到了此限制,这个客户端将会被MySQL服务阻止直到执行了”FLUSH  HOSTS”或者服务重启.

innodb_buffer_pool_size=            对于InnoDB表来说,innodb_buffer_pool_size的作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。

对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。

内存32G,24G

根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)。

basedir      =path          # 使用给定目录作为根目录(安装目录)。

datadir      =path          #从给定目录读取数据库文件。

pid-file     = filename      # 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统);

[mysqld]                       

socket = /tmp/mysql.sock     # 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(Linux下默认是/var/lib/mysql/mysql.sock文件)

port             = 3306      # 指定MsSQL侦听的端口

key_buffer       = 384M      # key_buffer是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写)。索引块是缓冲的并且被所有的线程共享,key_buffer的大小视内存大小而定。

table_cache      = 512       # 为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。可以避免频繁的打开数据表产生的开销

sort_buffer_size = 2M        # 每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100×6=600MB

read_buffer_size = 2M        # 读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。

query_cache_size = 32M       # 指定MySQL查询结果缓冲区的大小

read_rnd_buffer_size    = 8M # 改参数在使用行指针排序之后,随机读用的。

myisam_sort_buffer_size = 64M # MyISAM表发生变化时重新排序所需的缓冲

thread_concurrency      = 8 # 最大并发线程数,取值为服务器逻辑CPU数量×2,如果CPU支持H.T超线程,再×2

thread_cache            = 8 # #缓存可重用的线程数

skip-locking            # 避免MySQL的外部锁定,减少出错几率增强稳定性。

[mysqldump]

max_allowed_packet      =16M # 服务器和客户端之间最大能发送的可能信息包

 

1.6.客户端连接

 

# 查询当前连接进程

 

showprocesslist;

 

  • 访问mysql的命令格式:

mysql:

   -u  username          默认  root

   -p                    默认 

-h  myser_server       默认 loclhost本机  

 

示例:mysql -uroot -p -h 192.168.1.254

 

退出  \q

 

连接方式:

   linux  socket   serverclinet在同一台服务器

   windows  memory  共享内存

    网络端  TCP

 

mysql 客户端:

 

     交互式模式

     批处理模式

 

交互式模式中的命令类别:

     客户端命令 \h  帮助菜单

     服务器端命令  

         语句结束符: 默认为分号;

 

1.7.数据类型

 

关系数据库对象:

     

     

     索引

     视图

     键(约束)

     存储过程

     存储函数

     触发器

     游标

     用户

     权限

     事务

     

    表:

       row  field ,column 

       字段 数据类型  类型修饰(限制)

 

数值类型

整数类型        字节       范围(有符号)     范围(无符号)          用途 

TINYINT        1字节       (-128,127)          (0,255)        小整数值 

SMALLINT       2字节     (-32 768,32 767)       (0,65 535)         大整数值 

MEDIUMINT      3字节    (-8 388608,8 388 607) (0,16 777 215)     大整数值 

INT或INTEGER   4字节   (-2147 483 648,2 147 483 647) (0,4294 967 295) 大整数值 

BIGINT         8字节   (-9 233 372 036854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值 

FLOAT          4字节   (-3.402 823 466E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823466 E+38) 单精度浮点数值 

DOUBLE         8字节 (1.797 693 134 862 3157 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度浮点数值 

DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

 

字符串类型

字符串类型     字节大小        描述及存储需求

    CHAR        0-255字节         定长字符串 

    VARCHAR     0-255字节         变长字符串 

    TINYBLOB     0-255字节       不超过 255 个字符的二进制字符串 

    TINYTEXT     0-255字节       短文本字符串 

    BLOB        0-65535字节     二进制形式的长文本数据 

    TEXT        0-65535字节     长文本数据 

    MEDIUMBLOB   0-16 777215字节 二进制形式的中等长度文本数据 

    MEDIUMTEXT   0-16 777215字节 中等长度文本数据 

    LOGNGBLOB    0-4294 967 295字节 二进制形式的极大文本数据 

    LONGTEXT     0-4294 967 295字节 极大文本数据

    VARBINARY(M)                  允许长度0-M个字节的定长字节符串,值的长度+1个字节

    BINARY(M)    M                允许长度0-M个字节的定长字节符串

 

日期和时间类型

类型     大小(字节)     范围              格式         用途 

 DATE       4       1000-01-01/9999-12-31 YYYY-MM-DD    日期值 

 TIME       3       ‘-838:59:59‘/‘838:59:59‘ HH:MM:SS    时间值或持续时间 

 YEAR       1        1901/2155              YYYY       年份值 

 DATETIME   8      1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值 

 TIMESTAMP  4      1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

 

1.8.Mysql 软件管理

 

1.8.1.修改mysql字符集为UTF-8的方法:

show variables like "%char%"

 

/etc/my.cnf对应如下配置段加入相应命令

[clinet]字段加入default-character-set=utf8   客户端生效

[mysqld]字段加入character-set-server=utf8

[mysql]字段里加入default-character-set=utf8   本地生效

然后重启mysql服务

 

1.8.2.Mysql常用的两大引擎:MyISAMInnoDB

 

MyISAM MySQL5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务,支持表锁不支持行锁;

InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5 起成为默认数据库引擎;

BDB源自 Berkeley DB,事务型数据库的另一种选择,支持Commit 和Rollback 等其他事务特性;

Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在 MySQL 重新启动时丢失;

Mysql常用的两大引擎有MyISAM和innoDB,那他们有什么明显的区别呢,什么场合使用什么引擎呢?

MyISAM  类型的表强调的是性能,其执行数度比InnoDB类型更快,但不提供事务支持,如果执行大量的SELECT(查询)操作,MyISAM是更好的选择,支持表锁。

InnoDB   提供事务支持事务,外部键等高级数据库功能,执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表,支持行锁。

 

表锁和行锁:表锁,指当你插入数据时,其它命令不能插入和操作

            行锁,如果要插入一行数据时,会锁定当前行,其它行不影响

 

1.8.3.查看表使用的引擎:showcreate table test_t0;

 

                           

技术分享


 

MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但不提供事务支持,如果执行大量的SELECT(查询)操作,MyISAM是更好的选择,支持表锁。

InnoDB提供事务支持事务,外部键等高级数据库功能,执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表,支持行锁。

 

1.8.4.修改MySQL表空间引擎:

设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入

default-storage-engine=INNODB 然后重启mysqld服务即可。

 

修改表引擎方法如下:

altertable t1 engine=myisam;  
alter table t1 engine=innodb;  

 

如果添加innodb引擎报错,需要执行如下命令:

删除/mysql/data目录下的ib_logfile0,ib_logfile1文件即可。

 

1.8.5.创建索引命令

Alter table用来创建普通索引、unique索引或primary key索引。(我这里以t1表为例来讲解)

alter table t1 add index index_name (name)

alter table t1 add unique (name)

alter table t1 add primary key (name)

或者使用create创建

create index index_name on t1 (name)

create unique index index_name on t1 (name)

删除索引

drop index index_name on talbe_name

alter table t1 drop index index_name

 

1.8.6.MySQL慢查询

1) 查看当前mysql慢查询状态

show variables like "%slow%";

| log_slow_queries | OFF

| slow_launch_time | 2 |  超过2秒定义为慢查询。

| slow_query_log | OFF |  慢查询关闭状态。

| slow_query_log_file |/data/mysql/var/db-Test2-slow.log | 慢查询日志的文件。

 

2) 开启慢查询日志方法

临时开启:set globalslow_query_log=on;

永久开启: 在my.cnf中添加,如下:

log-slow-queries = /data/mysql/var/db-Test2-slow.log #日志目录。开启慢日志查询

long_query_time = 0.1   #记录下查询时间查过1秒。

log-queries-not-using-indexes  #表示记录下没有使用索引的查询。

 

3) mysqldumpslow分析日志

可用mysql提供的mysqldumpslow,使用很简单,参数可-help查看 -s:排序方式。

c , t , l , r 表示记录次数、时间、查询时间的多少、返回的记录数排序;

# ac , at , al , ar 表示相应的倒叙;

# -t:返回前面多少条的数据;

# -g:包含什么,大小写不敏感的;

 

mysqldumpslow-s r -t 10 /data/mysql/var/db-Test2-slow.log

1.8.7. MySQL数据库配置并发优化

Mysql的优化:一般分为配置的优化、sql语句的优化、表结构的优化、索引的优化,而配置的优化:一般包括系统内核优化、mysql本身配置文件的优化。

 

1.8.7.1.MySQL常见的优化参数详解:

l  硬件上的优化:

人气教程排行