Linux运维:MySQL的介绍和安装的使用

Liunx笔记:MySQL介绍与安装

Ago linux运维群: https://hankbook.cn 笔者QQ:578843228


第1章 介绍

1.1 数据库的种类

数据库的种类
关系型数据库 和 非关系型数据库:NOSQL
关系型数据库:mysql和oracle
非关系型数据库:NOSQL---not only sql
非关系型种类:
键值(key-valua):产品 mencached,redis(这两个比较重要)
列存储(column-oriented):cassandra,hbase(用的少)
面向文档(document-oriented):mongodb(这个重要),couchdb
图形(graph):neo4j,infogrid

1.1.1 关系型数据库知识和特点小结:

1) 关系型数据库在存储数据时实际就是采用的是一张二维表(和word、excell里几乎一样)
2) 市场占有量较大的是MySQL和Oracle数据库,而互联网场景醉常用的是MySQL数据库。
3) 它通过SQL结构化查询语言来存取、管理关系型数据库的数据
4) 关系型数据库在保持数据安全和数据一致性方面很强,遵循ACID理论

1.1.2 非关系型数据库(NOSQL)知识小结:

1)NOSQL数据库不是否定关系数据库,而是作为关系数据库的一个重要补充。
2)NOSQL数据库为了灵活及高性能、高并发而生,忽略影响高性能、高并发的功能。
3)在NOSQL数据库领域,当今的最典型产品为Redis(持久化缓存)、Mongodb、Memcached(纯内存)等。
4)NoSQL数据库没有标准的查询语言(SQL),通常使用REST式的数据接口或者查询API。

1.2 mysql:

特点:
1.mysql性能卓越,服务稳定,很少出现异常宕机
2.mysql开放源代码且无版权制约,自主性及使用成本低
3.mysql历史悠久,社区及用户非?;钤荆龅轿侍猓梢匝扒蟀镏?
4.mysql软件体积小,安装使用简单,并且易于维护,安装及维护成本低
5.mysql品牌口碑效应,使得企业无需考虑就直接用之,LAMP,LEMP流行架构
6.mysql支持多种操作系统,提供多种API接口,支持多种开发语言,特别对流行的PHP语言有很好的支持

1.3 MySQL版本 Alpha Beta RC GA

商业版和社区版 区别:
1.商业版本组织管理与测试环节控制更严格,稳定性方面会比社区版本更稳定
2.mysql是成熟产品,商业版与社区版之间性能方面相差不大
3.商业版不遵循GPL协议,社区版遵守GPL协议可以免费使用
4.使用商业版可以购买相关的服务,享受7*24小时技术支持以及定时打补丁等服务
但是用户必须为此支付服务费用
5.社区版本的维护只能靠社区提供,无法像商业版本获得故障及补丁解决服务了,
但是,使用社区版是完全免费的方式,社区版的服务质量与时效性等方面就无法与
mysql AB公司提供的服务相比了

1.4 MySQL版本选择最终建议:

企业生产场景选择MySQL数据库建议:
1.稳定版,选择开源的社区版的稳定版GA版本
2.产品线:可以选择5.1或5.5.互联网公司主流5.5,其次5.1和5.6
3.选择MySQL数据库GA版发布后6个月以上的GA版
4.要选择前后几个月没有大的BUG修复的版本,而不是大量修复BUG的集中版本
5.最好向后较长时间没有更新发布的版本
6.要考虑开发人员开发程序使用的版本是否兼容你所选择的版本
7.作为内部开发测试数据库环境,跑大概3-6个月的时间
8.优先企业非核心业务采用新版本的数据库GA版本如阿健
9.向DBA高手青椒,或者在及技术氛围好的群里和大家一起交流,使用真正的高手们用过好用的GA版本产品
10.经过上述工序之后,若使没有重要的功能BUG或性能瓶颈,则可以考虑作为任何业务数据服务的后端数据库软件

第2章 部署

部署5.6.34版本

2.1 安装方式

yum 安装
./configure make && makeinstall 5.0-5.1版本
cmake make&& makeinstall 5.4-5.7版本
二进制安装

2.2 查看环境

 [root@db02 tools]# cat /etc/redhat-release 
CentOS release 6.8 (Final)
[root@db02 tools]# uname -r
2.6.32-642.el6.x86_64
 [root@db02 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.

2.3 关闭防火墙和selinux

/etc/init.d/iptables stop
sed -i '#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config
setenforce 0

2.4 下载依赖包

yum install ncurses-devel libaio-devel -y
rpm -qa ncurses-devel libaio-devel

2.5 下载编译命令cmake

yum install cmake -y
rpm -qa cmake

2.6 创建用户

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

2.7 下载源码包并安装

cd /home/aige/tools/
wget http://110.96.193.5/1Q2W3E4R5T6Y7U8I9O0P1Z2X3C4V5B/ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/mysql-5.6.34.tar.gz
ls -l mysql-5.6.34.tar.gz
tar xf mysql-5.6.34.tar.gz
cd mysql-5.6.34
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.34 \
-DMYSQL_DATADIR=/application/mysql-5.6.34/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.34/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0

make && make install
ln -s /application/mysql-5.6.34/ /application/mysql

2.8 编译参数的说明

-DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.34 \              # 安装目录
-DMYSQL_DATADIR=/application/mysql-5.6.34/data \                # 设定mysql数据文件目录
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.34/tmp/mysql.sock \    # 设定mysql.sock路径
-DDEFAULT_CHARSET=utf8 \                                        # 这顶默认的字符集为utf-8
-DDEFAULT_COLLATION=utf8_general_ci \                           # 设定默认规则
-DWITH_EXTRA_CHARSETS=all \                                     # 
-DWITH_INNOBASE_STORAGE_ENGINE=1 \                              # 启用引擎  =1
-DWITH_FEDERATED_STORAGE_ENGINE=1 \                             # 禁用引擎  =0
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \                                          # 启用libz库支持
-DWITH_SSL=bundled \                                           # 启用
-DENABLED_LOCAL_INFILE=1 \                                   # 这个参数重复了,启用本地数据导入支持
-DWITH_EMBEDDED_SERVER=1 \                                     # 编译嵌入式服务器支持
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0                                                 # 禁用debug(默认为禁用)

2.9 编译安装后续操作

\cp /application/mysql/support-files/my-default.cnf /etc/my.cnf
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data/ --user=mysql
chown -R mysql. /application/mysql*
cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
chkconfig mysqld on
chkconfig --list mysqld
/etc/init.d/mysqld start
# cp /application/mysql/bin/mysql /usr/local/sbin/
echo "PATH=/application/mysql/bin/:$PATH" >> /etc/profile
tail -1 /etc/profile
. /etc/profile
echo $PATH

排错路径:

tailf /application/mysql/data/db02.err

设置密码

mysqladmin -u root password 'aige123'
# mysql_secure_installation 交互式

启动命令

# mysqld_safe 2>&1 > /dev/null &
/etc/init.d/mysqld start

在/etc/my.cnf添加这几行。免密码登录

[client]
user=root
password=aige123

2.10 多实例

停止单实例,并清空单实例数据,这里为了方便没清空数据。

/etc/init.d/mysqld stop
chkconfig mysqld off

目录结构

[root@db02 data]# tree /data/
/data/
├── 3306
│   ├── data
│   ├── my.cnf
│   └── mysql
└── 3307
    ├── data
    ├── my.cnf
    └── mysql
chown -R mysql.mysql /data/
find /data -name mysql|xargs chmod 700
find /data -name mysql|xargs ls -l


cd /application/mysql/scripts
./mysql_install_db  --defaults-file=/data/3306/my.cnf --basedir=/application/mysql/ --datadir=/data/3306/data --user=mysql
./mysql_install_db  --defaults-file=/data/3307/my.cnf --basedir=/application/mysql/ --datadir=/data/3307/data --user=mysql

/data/3306/mysql start
/data/3307/mysql start

2.10.1 配置文件

[client]
port            = 3306
socket          = /data/3306/mysql.sock

[mysql]
no-auto-rehash

[mysqld]
user    = mysql
port    = 3306
socket  = /data/3306/mysql.sock
basedir = /application/mysql
datadir = /data/3306/data
open_files_limit    = 1024
back_log = 600
max_connections = 800
max_connect_errors = 3000
table_open_cache = 614
external-locking = FALSE
max_allowed_packet =8M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 100
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/3306/error.log
#log-slow-queries = /data/3306/slow.log
pid-file = /data/3306/mysql.pid
#log-bin = /data/3306/mysql-bin
relay-log = /data/3306/relay-bin
relay-log-info-file = /data/3306/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
lower_case_table_names = 1
skip-name-resolve
slave-skip-errors = 1032,1062
replicate-ignore-db=mysql
server-id = 6
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/3306/aige_3306.err
pid-file=/data/3306/mysqld.pid

2.10.2 启动脚本

#!/bin/sh

#init
port=3306
mysql_user="root"
CmdPath="/application/mysql/bin"
mysql_sock="/data/${port}/mysql.sock"
mysqld_pid_file_path=/data/${port}/${port}.pid
start(){
    if [ ! -e "$mysql_sock" ];then
     	printf "Starting MySQL...\n"
        /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &
        sleep 3
    else
        printf "MySQL is running...\n"
        exit 1
    fi
}
stop(){
    if [ ! -e "$mysql_sock" ];then
        printf "MySQL is stopped...\n"
        exit 1
    else
        printf "Stoping MySQL...\n"
        mysqld_pid=`cat "$mysqld_pid_file_path"`
         if (kill -0 $mysqld_pid 2>/dev/null)
           then
             kill $mysqld_pid
             sleep 2
         fi
    fi
}

restart(){
    printf "Restarting MySQL...\n"
    stop
    sleep 2
    start
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        restart
    ;;
    *)
        printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac

2.10.3 制作3308实例

mkdir -p /data/3308/data
\cp /data/3306/my.cnf  /data/3308/
\cp /data/3306/mysql  /data/3308/
sed -i 's/3306/3308/g' /data/3308/my.cnf 
sed -i 's/server-id = 6/server-id = 8/g' /data/3308/my.cnf 
sed -i 's/3306/3308/g' /data/3308/mysql
chown -R mysql:mysql /data/3308
chmod 700 /data/3308/mysql
cd /application/mysql/scripts
./mysql_install_db --defaults-file=/data/3308/my.cnf --datadir=/data/3308/data --basedir=/application/mysql --user=mysql
chown -R mysql:mysql /data/3308
egrep "server-id|log-bin" /data/3308/my.cnf 
/data/3308/mysql start
sleep 5
netstat -lnt|grep 3308

2.11 多实例mysql启动和关闭的方法

启动

mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &

关闭

mysqladmin -uroot -paige123 -S /data/3306/mysql.sock shutdown

2.12 mysql管理

查看帮助。# ? or help
? contents
help contents



   Account Management                             # 账户管理
   Administration                                 # 管理员
   Compound Statements                            # 复合语句
   Data Definition                                # 数据定义
   Data Manipulation                              # 数据操作
   Data Types                                     # 数据类型
   Functions                                      # 函数
   Functions and Modifiers for Use with GROUP BY  # 与 GROUP BY相关的函数和修饰符
   Geographic Features                            #  地理特征
   Help Metadata                                  # 帮助元数据
   Language Structure                             # 语言结构
   Plugins                                        # 插件
   Procedures                                     # 存储过程
   Storage Engines                                # 存储引擎
   Table Maintenance                              # 表维护
   Transactions                                   # 事物处理
   User-Defined Functions                         # 用户自定义函数
   Utility                                        # 实用程序

2.13 安全策略

  1. 为root用户设置比较复杂的密码(用openssl或者uuid设置)
  2. 删除无用的mysql库内的用户账号,只保留root@localhost以及root@127.0.0.1
  3. 删除默认的test数据库
  4. 增加用户的时候 ,授权的权限尽量最小,允许访问的主机范围最小化
  5. 登录命令行操作不携带密码,而是回车后输入密码,mysql5.6版本起命令行携带密码会报警提示

删库

mysql -uroot -paige123 -e " drop user ''@'db02';"
mysql -uroot -paige123 -e " drop user ''@'localhost';"
mysql -uroot -paige123 -e " drop user 'root'@'::1';"
mysql -uroot -paige123 -e " drop user 'root'@'db02';"
mysql -uroot -paige123 -e " drop database test;"

为管理员设置密码
密码为空时:

mysqladmin -uroot password 'aige123'                     # 单实例
mysqladmin -uroot password 'aige123' -S /data/3306/mysql.sock # 多实例

密码不为空时:

mysqladmin -uroot -paige123 password 'aige123'                     # 单实例
mysqladmin -uroot -paige123 password 'aige123' -S /data/3306/mysql.sock # 多实例

修改密码

mysqladmin -uroot -paige  password 'aige123'
mysqladmin -u root password 'aige123'
UPDATE mysql.user SET password=PASSWORD("123") WHERE user='root' and host='localhost';
flush privileges;

忘记密码,忽略授权表修改密码

http://www.cnblogs.com/can-H/p/6667983.html

posted @ 2017-04-28 09:40  汉克书  阅读(500)  评论(0编辑  收藏  举报