MySQL简介及安装v0.1

关系型数据库:

1、  以行和列的二维表格来表示的。

2、  通过结构化查询语句(SQL语句)查询的数据库。

3、  关系型数据库的代表作Oracle和MySQL

非关系型数据库:不仅仅是关系型数据库,对关系型数据库的补充。

WEB2.0时代:以用户为主体(大量的读写,高并发,数据一致性)

Memcached:

    纯内存的,特点快,数据会丢失。新浪基于memcached开发了一个开源的项目Mencachedb,通过为memcached增加Berkeley DB的持久化存储机制和异步复制机制,使Mencached具备事务恢复、持久化存储能力和分布式复制能力。

Redis:

    数据存储在内存,定时刷新到磁盘上。

MongoDB:

    基于关系型和非关系型之间的数据库。

MySQL数据库发布版本介绍:

    Alpha版

    一般内部运行,不对外公开。主要是开发者自己对产品进行测试,检查产品是否存在缺陷、错误等

    Beta

    一般是完成功能开发和所有测试工作之后的产品,不会存在较大的功能或性能的BUG。并且邀请或者提供给用户进行体验与测试,以便更全面的测试软件的不足之处或存在的问题

    RC

    属于生产环境发布之前的一个小版本或称之为候选版,是根据beta版测试结果收集到的BUG和缺陷进行修复和完善后的一个版本。

    GA

    软件正式发布的产品,一般情况,企业生产环境都会选择GA版。

MySQL产品三条路线

第一条5.0.xx到5.1.xx

    5.0.xx升级到5.1.xx的产品系列,继续完善与改进其用户体验与性能,同时增加新功能,是MySQL早期产品的延续系列。

第二条5.4.xx到5.7.xx

    更好的整合了MySQL AB公司社区和第三方公司开发的新存储引擎,以及吸收新的实现算法,从而更好的支持SMP架构,提高了性能而且做了大量的代码重构。目前稳定版本是:MySQL5.5:latest general availability(production)release也是使用最多的版本。

第三条6.0.xx到7.1.xx

    为了更好地推广MySQL Cluster(MySQL集群,类似于Oracle RAC)版本,以及提高MySQL cluster的性能和稳定性对产品改进和增加,改动MySQL基础功能,使其对cluster存储引擎提供更有效的支持与优化。

版本命名介绍:

例如:mysql-5.0.56.tar.gz

第一个数字5表示主版本号

第二个数字0表示发行级别,主版本号加发行级别组合一起构成了发行序列号。

第三个数字56是在此发行系列的版本号。默认不加说明的是GA版。

编译安装MySQL

源码包如下:

mysql-5.5.32.tar.gz和cmake-2.8.8.tar.gz

社区版官方下载地址https://downloads.mysql.com/archives/community/

安装环境准备:

yum install -y gcc gcc-c++

yum install -y ncurses-devel

tar -zxf cmake-2.8.8.tar.gz

cd cmake-2.8.8

./configure

gmake

gmake install

groupadd mysql

useradd -s /sbin/nologin -M -g mysql mysql

mkdir /application

 

编译安装:

tar -zxf mysql-5.5.32.tar.gz

cd mysql-5.5.32

cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32/

-DMYSQL_DATADIR=/application/mysql-5.5.32/data

-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock

-DDEFAULT_CHARSET=utf8

-DDEFAULT_COLLATION=utf8_general_ci

-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii

-DENABLED_LOCAL_INFILE=NO

-DWITH_INNOBASE_STORAGE_ENGINE=1

-DWITH_FEDERATED_STORAGE_ENGINE=1

-DWITH_BLACKHOLE_STORAGE_ENGINE=1

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1

-DWITHOUT_PARTITION_STORAGE_ENGINE=1

-DWITH_FAST_MUTEXES=1

-DWITH_ZLIB=bundled

-DENABLED_LOCAL_INFILE=1

-DWITH_READLINE=1

-DWITH_EMBEDDED_SERVER=1

-DWITH_DEBUG=0

make && make install

MySQL初始化及环境变量配置:

ln -s /application/mysql-5.5.32/ /application/mysql

cp tools/mysql-5.5.32/support-files/my-small.cnf /etc/my.cnf

echo 'export PATH=/application/mysql/bin:$PATH' >> /etc/profile

source /etc/profile

chown -R mysql.mysql /application/mysql/data/

chmod -R 1777 /tmp

/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql

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

chmod +x /etc/init.d/mysqld

/etc/init.d/mysqld start

chkconfig mysqld on

netstat -antp | grep 3306

 

初始优化数据库

mysql 登陆数据库

drop database test;  删除多余的库

delete form mysql.user where user='';  删除多余的用户

delete from mysql.user where host!='localhost' or host!='127.0.0.1'; 删除非本地用户

delete from mysql.user;  或者删除所有用户,创建一个新的管理员。

grant all privileges on *.* to system@'localhost' identified by '123456' with grant option;   参数(with grant option)表示可以授权用户,真正跟root用户权限一致。

flush privileges; 刷新权限列表

 

 


 

MySQL多实例

MySQL多实例介绍:

    一台服务器上开启多个不同的服务端口(如:3306、3307),运行多个MySQL服务进程。这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务。这些MySQL多实例共用一套MySQL安装程序,使用不通(也可以相同)的my.cnf配置文件、启动程序、数据文件。多实例MySQL在逻辑上来看是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得服务器的相关硬件资源的多少。

多实例配置方案:

安装MySQL

make && make install

ln -s /application/mysql-5.5.32/ /application/mysql

echo 'export PATH=/application/mysql/bin:$PATH' >> /etc/profile

source /etc/profile

mkdir -p /data/{3307,3308}/data

创建配置文件

/data/3307/my.cnf

/data/3308/my.cnf

[client]

port    = 3307

socket  = /data/3307/mysql.sock

[mysql]

no-auto-rehash

[mysqld]

user    = mysql

port    = 3307

socket  = /data/3307/mysql.sock

basedir = /application/mysql

datadir = /data/3307/data

open_files_limit    = 1024

back_log    = 600

max_connections = 800

max_connect_errors  = 3000

table_cache = 614

external-locking    = FALSE

max_allowed_packet  = 8M

sort_buffer_size    = 1M

join_buffer_size    = 1M

thread_concurrency  = 2

query_cache_size    = 2M

query_cache_limit   = 1M

query_cache_min_res_unit= 2k

#default_table_type = InnoDB

thread_stack    = 192K

transaction_isolation   = READ-COMMITTED

tmp_table_size  = 2M

max_heap_table_size = 2M

long_query_time = 1

#log_long_format

log-error = /data/3307/error.log

log-slow-queries = /data/3307/slow.log

pid-file = /data/3307/mysql.pid

log-bin = /data/3307/mysql-bin

relay-log = /data/3307/relay-bin

relay-log-info-file = /data/3307/relay-log.info

binlog_cache_size   = 1M

max_binlog_cache_size   = 1M

max_binlog_size     = 2M

expire_logs_days    = 7

key_buffer_size = 16M

read_buffer_size= 1M

read_rnd_buffer_size    = 1M

bulk_insert_buffer_size = 1M

myisam_sort_buffer_size = 1M

myisam_max_sort_file_size = 10G

#myisam_max_extra_sort_file_size = 10G

myisam_repair_threads   = 1

myisam_recover

lower_case_table_names  = 1

skip-name-resolve

slave-skip-errors   = 1032,1062

replicate-ignore-db = mysql

server-id = 1

innodb_additional_mem_pool_size = 4M

innodb_buffer_pool_size = 32M

innodb_data_file_path   = ibdata1:128M:autoextend

innodb_file_io_threads  = 4

innodb_thread_concurrency = 8

innodb_flush_log_at_trx_commit  = 2

innodb_log_buffer_size  = 2M

innodb_log_file_size    = 4M

innodb_log_files_in_group = 3

innodb_max_dirty_pages_pct = 90

innodb_lock_wait_timeout = 120

innodb_file_per_table   = 0

[mysqldump]

quick

max_allowed_packet = 2M

[mysqld_safe]

log-error=/data/3307/mysql_3307_err.log

pid-file=/data/3307/mysqld.pid

 

[client]

port    = 3308

socket  = /data/3308/mysql.sock

[mysql]

no-auto-rehash

[mysqld]

user    = mysql

port    = 3308

socket  = /data/3308/mysql.sock

basedir = /application/mysql

datadir = /data/3308/data

open_files_limit    = 1024

back_log    = 600

max_connections = 800

max_connect_errors  = 3000

table_cache = 614

external-locking    = FALSE

max_allowed_packet  = 8M

sort_buffer_size    = 1M

join_buffer_size    = 1M

thread_concurrency  = 2

query_cache_size    = 2M

query_cache_limit   = 1M

query_cache_min_res_unit= 2k

#default_table_type = InnoDB

thread_stack    = 192K

transaction_isolation   = READ-COMMITTED

tmp_table_size  = 2M

max_heap_table_size = 2M

long_query_time = 1

#log_long_format

log-error = /data/3308/error.log

log-slow-queries = /data/3308/slow.log

pid-file = /data/3308/mysql.pid

log-bin = /data/3308/mysql-bin

relay-log = /data/3308/relay-bin

relay-log-info-file = /data/3308/relay-log.info

binlog_cache_size   = 1M

max_binlog_cache_size   = 1M

max_binlog_size     = 2M

expire_logs_days    = 7

key_buffer_size = 16M

read_buffer_size= 1M

read_rnd_buffer_size    = 1M

bulk_insert_buffer_size = 1M

myisam_sort_buffer_size = 1M

myisam_max_sort_file_size = 10G

#myisam_max_extra_sort_file_size = 10G

myisam_repair_threads   = 1

myisam_recover

lower_case_table_names  = 1

skip-name-resolve

slave-skip-errors   = 1032,1062

replicate-ignore-db = mysql

server-id = 1

innodb_additional_mem_pool_size = 4M

innodb_buffer_pool_size = 32M

innodb_data_file_path   = ibdata1:128M:autoextend

innodb_file_io_threads  = 4

innodb_thread_concurrency = 8

innodb_flush_log_at_trx_commit  = 2

innodb_log_buffer_size  = 2M

innodb_log_file_size    = 4M

innodb_log_files_in_group = 3

innodb_max_dirty_pages_pct = 90

innodb_lock_wait_timeout = 120

innodb_file_per_table   = 0

[mysqldump]

quick

max_allowed_packet = 2M

[mysqld_safe]

log-error=/data/3308/mysql_3308_err.log

pid-file=/data/3308/mysqld.pid

 

注:上述配置文件有三个选项被注释,不注释启动时报没有此选项错误。不知道为什么。

最后tree的结果如下:

/data

├── 3307

│   ├── data

│   ├── my.cnf

└── 3308

    ├── data

    └── my.cnf

初始化数据库实例:(以3307实例为例)

/application/mysql/scripts/mysql_install_db  --basedir=/application/mysql --datadir=/data/3307/data/ --user=mysql   

手动启动和关闭数据库实例:

    启动数据库实例

    /application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null &  

    平滑关闭数据库实例

    mysqladmin -uroot password '123456' -S /data/3307/mysql.sock shutdown

自动启动脚本:

#!/bin/sh

#Nick Suo

#email:630571017@qq.com

#blog:http://www.cnblogs.com/suoning

 

#init

port=3307

mysql_user="root"

mysql_pwd="123456"

CmdPath="/application/mysql/bin"

mysql_sock="/data/${port}/mysql.sock"

#startup function

function_start_mysql()

{

    if [ ! -e "$mysql_sock" ];then

      printf "Starting MySQL... "

      /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &

    else

      printf "MySQL is running... "

      exit

    fi

}

 

#stop function

function_stop_mysql()

{

    if [ ! -e "$mysql_sock" ];then

       printf "MySQL is stopped... "

       exit

    else

       printf "Stoping MySQL... "

       ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown

   fi

}

 

#restart function

function_restart_mysql()

{

    printf "Restarting MySQL... "

    function_stop_mysql

    sleep 2

    function_start_mysql

}

 

case $1 in

start)

    function_start_mysql

;;

stop)

    function_stop_mysql

;;

restart)

    function_restart_mysql

;;

*)

    printf "Usage: /data/${port}/mysql {start|stop|restart} "

esac

注:由于关闭数据库实例需要输入密码所以要将改过的密码在脚本里更改一下。指定密码的参数:mysql_pwd="123456"

登陆数据库实例:

mysql -uroot -p123456 -S /data/3307/mysql.sock

注:多实例情况下,任何操作都要需要通过-S指定socker。MySQL下system命令可以跳出MySQL执行在系统环境下的命令

如果启动失败,就查看日志文件。

 

MySQL使用

help帮助

    查看MySQL内置命令使用方法,及参数选项。例如查看grant如何让使用

    使用实例:mysql> help grant

更改密码:

    初始设置密码:mysqladmin -uroot password "qixiao"

    已有密码在系统环境下更改密码:mysqladmin -uroot password "qixiao" -p123456

    已有密码在sql里使用update更改密码:

mysql> update mysql.user set password=password(123456) where user="root" and host="localhost" ;

mysql> flush privileges;  刷新权限列表

    忘记密码情况下通过跳过权限列表更改密码:

/etc/init.d/mysqld stop     #关闭服务器

/usr/bin/mysqld_safe --skip-grant-tables --user=mysql &

使用mysqld_safe加--skip-grant-tables跳过安全权限列表启动。

mysql   直接登陆

通过update更改密码

    多实例忘记密码

mysqladmin -uroot -p123456 -S /data/3307/mysql.sock  shutdown  关闭实例

/application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf --skip-grant-tables --user=mysql &  指定配置文件跳过权限列表登陆

mysql -S /data/3307/mysql.sock   指定socket直接登陆

通过update更改密码

刷新权限列表

常用操作:

mysql> show databases like '%xia%';   查找数据库,模糊查找

mysql> use qixiao;         选择数据库

mysql> select database();  显示当前数据库

mysql> select user();      显示当前用户

mysql> select now();       显示当前事件

mysql> drop user 'qixiao'@'localhost';  删除多余用户(当主机名是大写的时候删不掉,可以用delete删除)

mysql> delete from mysql.user where user='' and host='XYDC-63'; 删除。

mysql> flush privileges;   处理完用户最好刷新一下权限。

mysql> show grants for qixiao@localhost;  查看用户权限

mysql> revoke insert on *.* from 'admin'@'localhost';  回收权限

授权用户:

mysql> grant all privileges on *.* to qixiao@localhost identified by '123456';

grant

all privileges

on *.*

to qixiao@localhost

identified by '123456';

授权命令

对应权限

目标:库和表

用户名和客户端主机

用户密码

客户端主机网段匹配:10.0.0.0/255.255.255.0或者10.0.0.%   授权一个网段。

查询所有权限:

[root@XYDC-64 ~]# mysql -uroot -p123456 -e "show grants for admin@localhost;"|grep -i grant |tail -1|tr ',' ' ' > privileges.txt

-e表示在不登陆进去的情况下执行SQL语句。tr 表示将逗号替换成换行。

授权权限:

    ALL PRIVILEGES:所有权限

SELECT

UPDATE

DELETE

CREATE

DROP

RELOAD

SHUTDOWN

PROCESS

FILE

REFERENCES

INDEX

ALTER

SHOW DATABASES

SUPER

查询

更改

删除数据

创建

删除表

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/lingshu/p/11338407.html