• linux运维、架构之路-MySQL(一)


    一、数据库管理系统

    1、RDBMS关系型数据库特点

    ①二维表

    ②典型产品Oracle传统企业,MySQL是互联网企业产品

    ③数据存取通过SQL

    ④最大的特点,数据安全性很强(ACID)

    2、NoSQL非关系型数据库特点

    ①不是否定关系型数据库,做关系型数据库的补充

    ②典型产品:Redis持久化缓存、MongoDB、Memcached

    ③管理不适用SQL管理,而是用一些特殊的API或者数据接口

    二、MySQL安装方式

    1、Yum安装方便、安装速度快,无法定制

    2、二进制:不方便安装,解压即可使用,无法定制

    3、编译安装:可定制,安装慢

    5.5之前:./configure make && make install

    5.5之后:cmake gmake

    4、定制RPM包,先编译然后制作rpm再制作yum仓库,然后yum安装

           安装简单、速度快,可定制,定制时间长,比较复制,大型企业都会选择定制RPM

    三、实战编译安装MySQL-5.6.36

    1、环境

    [root@db mysql-5.6.36]# cat /etc/redhat-release 
    CentOS release 6.9 (Final)
    [root@db mysql-5.6.36]# uname -r
    2.6.32-696.el6.x86_64
    [root@db mysql-5.6.36]# /etc/init.d/iptables status
    iptables: Firewall is not running.
    [root@db mysql-5.6.36]# getenforce 
    Disabled
    [root@db mysql-5.6.36]# hostname -I
    172.19.5.54 172.16.1.54

    2、安装

    安装依赖包创建用户 

    yum  install  -y  ncurses-devel libaio-devel cmake
    useradd -s /sbin/nologin -M mysql
    mkdir /server/tools/ -p
    cd /server/tools/
    wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36.tar.gz
    tar xf mysql-5.6.36.tar.gz
    cd mysql-5.6.36
    cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.36 
    -DMYSQL_DATADIR=/application/mysql-5.6.36/data 
    -DMYSQL_UNIX_ADDR=/application/mysql-5.6.36/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.36/ /application/mysql
    cp /server/tools/mysql-5.6.36/support-files/my*.cnf /etc/my.cnf
    /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql
    cp /server/tools/mysql-5.6.36/support-files/mysql.server /etc/init.d/mysqld
    chmod 700 /etc/init.d/mysqld
    chkconfig mysqld on
    chkconfig --list mysqld
    mkdir /application/mysql/tmp
    chown -R mysql.mysql /application/mysql/
    echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile
    source /etc/profile
    /etc/init.d/mysqld start

    Cmake的作用

    ①定制软件的安装路径
    ②定制mysql的源程序和命令脚本
    	bin/mysqld(二进制的)关键守护程序源码
    	bin/mysql
    	bin/mysqld_safe
    	scripts/mysql.server
    	bin/mysqldump
    	bin/mysqladmin
    	supports-file/mysql_install_db

    5.7版本开始,需要安装Boost库

    -DWITH_BOOST=/server/tools/boost_1_59_0 
    也可以直接cmake指定参数 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory> 系统会下载 boost

    3、清理数据库及不需要的用户

    drop database test;
    drop user 'root'@'::1';
    drop user 'root'@'db';
    drop user ''@'db';
    drop user ''@'localhost';
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    +--------------------+
    3 rows in set (0.00 sec)
    mysql> select user,host from mysql.user;
    +------+-----------+
    | user | host      |
    +------+-----------+
    | root | 127.0.0.1 |
    | root | localhost |
    +------+-----------+
    2 rows in set (0.00 sec)

    4、安装遇到的报错

    问题1:

    ERROR! The server quit without updating PID file (/application/mysql-5.6.36/data/db.pid).
    

     解决:

    chown -R mysql.mysql /application/mysql-5.6.36/

    问题2:

    数据库启动会提示,找不到/application/tmp/mysql.sock,原因是5.6.36版本不会自动创建tmp目录

    解决:

    mkdir /application/mysql/tmp

    其它常见问题

    	①权限.chown -R mysql.mysql
    	②killall mysqld
    	③重新初始化数据.
    	④运行1年了,出问题(非法(断电)关机或者非法关数据库,例如kill -9)

    四、MySQL基础命令使用

    命令

    说明

    show databases;

    查询显示所有的数据库信息

    create database oldboy;

    创建新的数据库

    drop database oldboy;

    删除存在的数据库

    use mysql;

    表示选择使用一个数据库,相当于cd进入一个数据库

    show tables;

    查看数据库中表信息

    select database();

    表示查看当前所在数据库,类似于pwd命令的功能

    select user();

    查看当前登录数据库的用户,类似于whoami命令

    select * from userG;

    查看user表中所有信息,并且纵行显示

    select user,host from user;

    查看user表中指定信息,并且横行显示

    select user,host from mysql.user;

    查看可以登录mysql数据库的目录,以及都可以从哪里进行管理mysql数据库

    drop user 'user'@'host';

    删除用户

    flush privileges;

    刷新权限

    grant all on .* to user@'host' identified by 'oldboy123';

    创建用户

    grant all on .* to Old_Boy@'localhost' identified by 'oldboy123';

    创建用户(用户名包含大写字母)

    mysqladmin -u root password '123456';

    为用户设置密码

    mysqladmin -uroot -p123456 password 654321

    修改密码,在知道旧密码的前提下

    delete from mysql.user where user="root" and host="Mysql";

    遇主机名大写,特殊字符使用drop无法删除

     五、MySQL多实例配置

    1、环境

    [root@db ~]# cat /etc/redhat-release 
    CentOS release 6.9 (Final)
    [root@db ~]# uname -r
    2.6.32-696.el6.x86_64
    [root@db ~]# /etc/init.d/iptables status
    iptables: Firewall is not running.
    [root@db ~]# getenforce 
    Disabled
    [root@db ~]# hostname -I
    172.19.5.54 172.16.1.54

    2、配置多实例

    ①创建多实例目录授权

    mkdir /data/{3306,3307}/data -p
    chown -R mysql.mysql /data/

    ②上传多实例配置文件到/下并解压

    cd /
    #上传打包好的多实例配置文件、数据、启动命令
    unzip data.zip
    [root@db /]# tree /data
    /data
    ├── 3306
    │   ├── my.cnf
    │   └── mysql
    └── 3307
        ├── my.cnf
        └── mysql
    
    2 directories, 4 files

    ③初始化多实例数据库

    cd /application/mysql/scripts/
    ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data/ --user=mysql #初始化数据库3306
    ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql #初始化数据库3307

    ④授权并启动多实例数据库

    #5.6.36特殊性:需要创建错误日志文件
    touch /data/3306/oldboy_3306.err
    touch /data/3307/oldboy_3307.err
    chown -R mysql.mysql /data
    chmod +x /data/3306/mysql
    chmod +x /data/3307/mysql
    /data/3306/mysql start
    /data/3307/mysql start

    配置MySQL命令启动环境变量

    方法一:
    ln -s /application/mysql/bin/* /usr/local/sbin/ 
    方法二:
    echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
    source /etc/profile

    ⑤MySQL多实例设置密码及登录

    #设置密码:
    mysqladmin -uroot password 123456 -S /data/3306/mysql.sock
    mysqladmin -uroot password 123456 -S /data/3307/mysql.sock
    #登录数据库,指定sock
    mysql -uroot -p123456 -S /data/3306/mysql.sock
    mysql -uroot -p123456 -S /data/3307/mysql.sock
    

    查看多实例端口

    [root@db ~]# netstat -lntup|grep 330
    tcp        0      0 :::3306                     :::*                        LISTEN      17958/mysqld        
    tcp        0      0 :::3307                     :::*                        LISTEN      18166/mysqld 

    ⑥快速搭建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 
    touch /data/3308/oldboy_3308.err
    /data/3308/mysql start
    sleep 5
    netstat -lnt|grep 3308

    3、MySQL密码找回

    ①停止MySQL服务

    /etc/init.d/mysqld stop

    ②加参数启动

    mysqld_safe --skip-grant-table --user=mysql &

    ③登录修改密码

    set password=password('123456');
    flush privileges;
    mysql> mysql
    mysql> update mysql.user set password=PASSWORD('123456') where user='root' and host='localhost';

    注:5.7中PASSWORD字段变成了authentication_string

    ④刷新权限重新MySQL

    mysql> flush privileges;
    /etc/init.d/mysqld restart

    ⑤重新登录测试

    mysql -uroot -p123456

    ⑥多实例MySQL密码找回

    #停库#
    mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-tables &
    mysqladmin -uroot -p123456 -S /data/3306/mysql.sock shutdown

    六、MySQL管理实战

    1、MySQL连接管理

    ①TPC/IP的方式

    mysql -uroot -p123456 -h 10.0.0.54
    

    ②套接字文件的方式

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

    2、MySQLD服务器程序构成

    3、MySQL用户权限

    ①查看用户

    select user,host from mysql.user;

    ②创建用户

    CREATE USER '用户'@'主机' IDENTIFIED BY '密码';
    create user 'oldboy'@'locahost' identified by 'oldboy123';  #只能连接

    ③工作中常用授权网段方式

    方法1:172.16.1.% #%为通配符,匹配所有内容
    方法2:172.16.1.0/255.255.255.0 #是不能使用172.16.1.0/24

    ④查看用户对应的权限

    show grants for oldboy@localhostG

    ⑤删除用户

    drop user 'user'@'主机域'
    遇主机名大写特殊的删除方法:
    delete from mysql.user where  user='bbs' and host='172.16.1.%'; 
    flush privileges;

    ⑥创建用户并授权

    grant all on *.* to oldboy@'172.16.1.%' identified by '123456';
    flush privileges;

    ⑦权限回收

    REVOKE INSERT ON *.* FROM oldboy@localhost;

    ⑧可以授权的用户权限

    INSERT,SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE

    ⑨博客正确授权

    grant select,insert,update,delete,create,drop on blog.* to 'blog'@'172.16.1.%' identified by '123456';
    revoke create,drop on blog.* from 'blog'@'172.16.1.%';

    3、MySQL初始化配置文件

    4、MySQL的关闭

     ①使用MySQL自带的管理脚本

    /etc/init.d/mysqld stop

    ②使用mysqladmin管理

    mysqladmin -uroot -123456 shutdown #必须知道数据库密码

    ③利用系统进程管理命令关闭MySQL(不建议使用)

    kill  pid       #<==这里的pid为数据库服务对应的进程号。
    killall mysqld  #<==这里的mysqld是数据库服务对应的进程名字。
    pkill mysqld    #<==这里的mysqld是数据库服务对应的进程名字

    企业高并发场景野蛮粗鲁杀死mysql导致数据库故障

    http://oldboy.blog.51cto.com/2561410/1431161
    http://oldboy.blog.51cto.com/2561410/1431172
    成功最有效的方法就是向有经验的人学习!
  • 相关阅读:
    C# 关键字 virtual、override和new的用法
    架构技术及架构要素总结【转】
    vue文件目录结构
    vue项目中,如何对static文件夹下的静态文件添加时间戳,以达到清除缓存
    webpack中关于require与import的区别
    vue 根据下拉框动态切换form的rule
    el-select 根据value查询其对应的label值
    web前端项目规范
    JavaScript 编码规范
    HTML 编码规范
  • 原文地址:https://www.cnblogs.com/yanxinjiang/p/8108624.html
Copyright © 2020-2023  润新知