学习参考博客:https://www.jianshu.com/nb/36336961

1 学习大纲

  1. MySQL 5.7安装部署(二进制),编译自己扩展
  2. MySQL升级步骤扩展
  3. MySQL5.7 体系结构原理
  4. MySQL基础管理
  5. 基础SQL语句使用
  6. SQL高级应用
  7. Information_schema获取元数据
  8. 索引、执行计划管理(基础优化)
  9. 存储引擎
  10. 日志管理
  11. 备份与恢复
  12. 主从复制及架构演变
  13. 传统的高可用及读写分离(MHA&Atlas)
  14. 传统分布式架构设计与实现-扩展(Mycat—>DBLE,DRDS)
  15. MySQL 5.7高可用及分布式架构-扩展(MGR,InnoDB Cluster)
  16. MySQL优化(安全、性能)
  17. MySQL监控(zabbix、Open-falcon)
  18. RDS(阿里云课程)

    2 基础知识

    数据库分类
    RDBMS: 关系型数据库管理系统
    NOSQL: 非关系型的
    NewSQL:新型的分布式解决方案
    数据库发展路径
    RDBMS—->NOSQL+RDBMS—->NOSQL(RDBMS),RDBMS(NOSQL)——>NewSQL(spanner TiDB PDB)
    全球数据库排名网站
    https://db-engines.com/en/ranking
    MySQL企业版本GA选择
    5.6:5.6.34 5.6.36 5.6.38(2017.09.13) 5.6.40
    5.7:5.7.18 5.7.20(2017.09.13) 5.7.24 5.7.26
    8.0:8.0.14 8.0.15 8.0.16

    3 安装部署

    3.1 解压软件

    1)创建一个目录用于存放mysql安装包以及安装目录
    [root@db01 ~]# mkdir /server/tools /application
    2)对上传的mysql安装包进行解压
    [root@db01 tools]# tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
    3)将解压的文件移动并重命名为mysql至程序安装目录/application下
    [root@db01 tools]# mv mysql-5.7.26-linux-glibc2.12-x86_64 /application/mysql

    3.2 添加用户并设置环境变量

    1)创建mysql用户
    [root@db01 ~]# useradd -s /sbin/nologin mysql
    2)设置环境变量
    [root@db01 ~]# vim /etc/profile
    export PATH=/application/mysql/bin/:$PATH
    [root@db01 ~]# source /etc/profile
    3)验证命令是否可用
    [root@db01 ~]# mysql -V

    3.3 挂载数据盘

    生产环境建议将数据盘单独挂载,此处lab环境可以忽略
    1)格式化磁盘
    [root@db01 ~]# mkfs.xfs /dev/sdb
    2)创建挂载目录
    [root@db01 ~]# mkdir /data
    3) 查看UUID
    [root@db01 ~]# blkid | grep sdb
    /dev/sdb: UUID=”e2e80666-2ead-40fe-9d27-021375c1271e” TYPE=”xfs”
    4) 编辑挂载文件
    [root@db01 ~]# vim /etc/fstab
    UUID=e2e80666-2ead-40fe-9d27-021375c1271e /data xfs defaults,nofail,noatime 0 0
    5)挂载
    [root@db01 ~]# mount -a
    6)查看挂载情况
    [root@db01 ~]# df -Th | grep sdb
    /dev/sdb xfs 20G 33M 20G 1% /data

    3.4 修改目录权限

    [root@db01 ~]# chown -R mysql.mysql /application/*
    [root@db01 ~]# chown -R mysql.mysql /data

    3.5 MySQL初始化

    初始化用于生成系统原始数据
    5.6版本:初始化命令 /application/mysql/scripts/mysql_install_db
    5.7版本:采用以下方式
    [root@db01 ~]# mkdir /data/mysql/data -p
    [root@db01 ~]# chown -R mysql.mysql /data/mysql/data/
    [root@db01 ~]# mysqld —initialize —user=mysql —basedir=/application/mysql —datadir=/data/mysql/data
    备注1:通常在初始化时会提示缺少依赖库,需要安装一下依赖文件
    [root@db01 ~]# yum install -y libaio-devel
    备注2:这种初始化方法会有默认密码,且对密码做了如下限制,一般不这样进行初始化
    1、对于密码复杂度进行定制:12位,4种
    2、密码过期时间,180
    3、给root@localhost用户设置临时密码
    采用以下初始化方式,完成之后无初始密码
    [root@db01 ~]# rm -rf /data/mysql/data/*
    [root@db01 ~]# mysqld —initialize-insecure —user=mysql —basedir=/application/mysql —datadir=/data/mysql/data —explicit_defaults_for_timestamp
    image.png
    —initialize-insecure 参数:无密码复杂度限制,无临时密码

    3.6 配置文件

    生成配置文件[root@db01 ~]# vim /etc/my.cnf
    1. [mysqld]
    2. user=mysql
    3. basedir=/application/mysql
    4. datadir=/data/mysql/data
    5. socket=/tmp/mysql.sock
    6. server_id=6
    7. port=3306
    8. [mysql]
    9. socket=/tmp/mysql.sock

    3.7 启动数据库

    3.7.1 sys-v方式

    [root@db01 ~]# cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
    [root@db01 ~]# service mysqld restart

    3.7.2 systemd方式

    [root@db01 ~]# cat /etc/systemd/system/mysqld.service
    1. [Unit]
    2. Description=MySQL Server
    3. Documentation=man:mysqld(8)
    4. Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
    5. After=network.target
    6. After=syslog.target
    7. [Install]
    8. WantedBy=multi-user.target
    9. [Service]
    10. User=mysql
    11. Group=mysql
    12. ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
    13. LimitNOFILE = 5000

    4 密码管理

    4.1 设置密码

    此为第一次设置密码
    [root@db01 ~]# mysqladmin -uroot -p password abc123..

    4.2 修改密码

    [root@db01 ~]# mysqladmin -uroot -p password abc123..
    Enter password: 此处输入旧密码即可

    5 常见问题处理

    5.1 without updating PID 类似错误

    查看日志信息
    cat /data/mysql/data/主机名.err
    [ERROR] 上下文
    可能情况:
    /etc/my.cnf 路径不对等
    /tmp/mysql.sock文件修改过或删除过
    数据目录权限不是mysql
    参数改错了

    5.2 管理员密码忘记处理

    —skip-grant-tables 跳过授权表
    —skip-networking 跳过远程登录
    1)关闭数据库
    /etc/init.d/mysqld stop
    2)启动数据库进入维护模式
    mysqld_safe —skip-grant-tables —skip-networking &
    3)登录并修改密码
    mysql> alter user root@’localhost’ identified by ‘123456’;
    ERROR 1290 (HY000): The MySQL server is running with the —skip-grant-tables option so it cannot execute this statement
    mysql> flush privileges;
    Query OK, 0 rows affected (0.01 sec)
    mysql> alter user root@’localhost’ identified by ‘123456’;
    Query OK, 0 rows affected (0.00 sec)
    4)关闭重启数据库即可恢复