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...\n" /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null & else printf "MySQL is running...\n" exit fi }
#stop function function_stop_mysql() { if [ ! -e "$mysql_sock" ];then printf "MySQL is stopped...\n" exit else printf "Stoping MySQL...\n" ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown fi }
#restart function function_restart_mysql() { printf "Restarting MySQL...\n" 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}\n" 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 ',' '\n' > privileges.txt
-e表示在不登陆进去的情况下执行SQL语句。tr 表示将逗号替换成换行。
授权权限:
ALL PRIVILEGES:所有权限
SELECT |
UPDATE |
DELETE |
CREATE |
DROP |
RELOAD |
SHUTDOWN |
PROCESS |
FILE |
REFERENCES |
INDEX |
ALTER |
SHOW DATABASES |
SUPER |
查询 |
更改 |
删除数据 |
创建 |
删除表 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|