• Linux下编译安装MySQL


    一、环境准备
    yum install -y ncurses-devel libaio-devel
    yum install -y cmake make
    useradd -s /sbin/nologin -M mysql
    wget --no-check-certificate https://downloads.mysql.com/archives/get/file/mysql-5.6.38.tar.gz

    二、编译安装mysql
    cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.38
    -DMYSQL_DATADIR=/application/mysql-5.6.38/data
    -DMYSQL_UNIX_ADDR=/application/mysql-5.6.38/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
    报错: CMake Error: your C compiler: "CMAKE_C_COMPILER-NOTFOUND" was not found,需要安装gcc、gcc-c++
    yum -y install gcc gcc-c++
    并删除原来的mysql-5.6.13目录,重新解压缩tar.gz包

    三、初始化数据库(初始化数据库(建库),初始化的是mysql基本运行所必须的一些“系统库”(元数据))
       ln -s /application/mysql-5.6.38 /application/mysql   #创建软链接
       chown -R mysql.mysql /application/mysql
       /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql  #初始化MySQL
       /application/mysql/bin/mysqld --verbose --help   #查看可配置的参数
       [root@db01 mysql]# vim /etc/my.cnf
       [mysqld]
       datadir=/application/mysql/data
       socket=/application/mysql/tmp/mysql.sock
       user=mysql
       # Disabling symbolic-links is recommended to prevent assorted security risks
       symbolic-links=0
       [mysqld_safe]
       log-error=/application/mysql/tmp/mysqld.log
       pid-file=/application/mysql/tmp/mysqld.pid
       cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
       /etc/init.d/mysqld start
       echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile    #把mysql加入到环境变量
       source /etc/profile

    四、密码破解
      1、方法一:
        [root@db01 mysql]# mysqld_safe --skip-grant-tables --skip-networking & #以“安全模式”登录数据库,并禁止远程登陆
        mysql> update mysql.user set password=PASSWORD('110') where user='root' and host='localhost';

      2、方法二:
        [root@db01 mysql]# vim /etc/my.cnf
        [mysqld]
        skip-grant-tables #在my.cnf文件中加上这句(跳过mysql授权表),修改完密码后注释或删除
        [root@db01 mysql]# /etc/init.d/mysqld restart #重启MySQL服务
        [root@db01 mysql]# mysql #登录MySQL
        mysql> select user(); #查看登录用户是否为root
        mysql> update mysql.user set password=password("123") where user="root" and host="localhost"; #修改密码为123
        mysql> flush privileges;

      注:
          5.7中不再使用password字段进行存储密码,使用authentication_string来替代,修改命令如下:
          mysql> update mysql.user set authentication_string=PASSWORD('123') where user='root' and host='localhost';

    五、MySQL工作流程
       1、客户端发起 登录数据库命令:
           mysql -uroot -p110

       2、服务器接收到连接命令
           2.1 提供连接协议(TCP/IP、socket)
           2.2 用户密码验证模块,通过mysql.user表中记录的用户信息,检验客户端发送过的用户密码
           2.3 分配一个专门的连接线程和当前对接工作,接收SQL(不负责处理SQL),将SQL交给SQL继续处理,最后返回结果。

       3、SQL层接收到上层传送过来的SQL语句(select user,password,host from mysql.user;)
           3.1 通过语法模块判断语法,如果语法通过,交到语义判断模块。
           3.2 语义判断模块判断语义,
                 判断一下是什么类型的SQL语句(DML、DDL、DCL、DQL),会将不同的类型的SQL交给不同的SQL解析器解析
                 操作对象是什么,并进行权限判断
           3.3 SQL解析器解析SQL语句,解析成1种或多种执行计划(explain)
           3.4 优化器拿到多种执行计划,进行判断,选择他觉得更优的执行计划,交给执行器
           3.5 执行器按照执行计划进行SQL执行,生成获取数据的方法(哪个数据文件的哪个页上),交由下层继续处理
           3.6 将上次运行过的SQL语句本身进行hash,加上语句的执行结果(获取的数据),放到查询缓存中一份。
                 注:一般情况下我们可以通过redis memecahe来代替这项功能。
           3.7 查询日志记录:binlog

       4、存储引擎层接受到SQL层处理后的结果,从磁盘获取到相应的数据。再返回给SQL进行结构化成表的形式,再显示给用户。

    六、配置文件(/etc/my.cnf)
       1、能影响什么?
            服务启动[server]:mysqld、mysqld_safe
            客户端链接[client]:mysql、mysqladmin、mysqldump
       2、配置示例:
            vim /etc/my.cnf
            [server]
            basedir=/application/mysql
            datadir=/application/mysql/data
            socket=/tmp/mysql.sock
            log-error=/var/log/mysql.log
            log_bin=/data/mysql/mysql-bin
            binlog_format=row
            skip_name_resolve=1
            server_id=3306
            port=3306
            [client]
            socket=/tmp/mysql.sock
       注:
             使用/application/mysql/bin/mysqld --verbose --help查到的参数都可以写到配置文件里,写到配置文件里时去掉参数前的--
       3、配置文件的读取顺序
             /etc/my.cnf → /etc/mysql/my.cnf → $MYSQL_HOME/my.cnf → ~/.my.cnf → --defaults-extra-file

    注意:
            1、多个配置文件中都有socket=xxx.sock,且每个配置文件中的值都不一样时按照以上顺序,最后一个为准
            2、如果设置了 --defaults-file=/tmp/aa.txt,会忽略以上所有的配置信息,如:
                  mysqld_safe --defaults-file=/tmp/mysql.txt &
            3、如果命令行中设置了和配置文件中相同的参数,最终会以命令行为准,如:
                 mysqld_safe --log-error=/var/log/mysql.log --socket=/tmp/mysql.sock --port=3310 & 

    七、MySQL多实例(实例:mysqld+后台线程+预分配的内存结构)
       1、多套独立的目录(日志、socket)
            mkdir -p /data/330{7,8,9}
            chown -R mysql.mysql /data/330*

       2、独立的数据(初始化多次)
            /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307 --user=mysql
           /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/data/3308 --user=mysql
          /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/data/3309 --user=mysql

       3、独立的端口(3307、3308、3309)

       4、独立的配置文件(/data/3307/my.cnf /data/3308/my.cnf /data/3309/my.cnf )
            [root@db02 3309]# cat /data/3307/my.cnf /data/3308/my.cnf /data/3309/my.cnf

    [mysqld]
    basedir=/application/mysql
    datadir=/data/3307
    socket=/data/3307/mysql.sock
    log-error=/data/3307/mysql.log
    log_bin=/data/3307/mysql-bin
    binlog_format=row
    skip_name_resolve=1
    server_id=3307
    port=3307
    
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3308
    socket=/data/3308/mysql.sock
    log-error=/data/3308/mysql.log
    log_bin=/data/3308/mysql-bin
    binlog_format=row
    skip_name_resolve=1
    server_id=3308
    port=3308
    
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3309
    socket=/data/3309/mysql.sock
    log-error=/data/3309/mysql.log
    log_bin=/data/3309/mysql-bin
    binlog_format=row
    skip_name_resolve=1
    server_id=3309
    port=3309

       5、启动多实例
            mysqld_safe --defaults-file=/data/3307/my.cnf &
            mysqld_safe --defaults-file=/data/3308/my.cnf &
            mysqld_safe --defaults-file=/data/3309/my.cnf &
            netstat -lnp|grep 330

    八、常用命令
        mysql
           -u 用户名
           -p 密码
           -h mysql,IP地址
           -S 套接字文件
           -P 端口
           -e 非交互式访问数据库并执行命令
        mysql -uroot -p123456 -e "show databases"
        启动方式:mysql.server(脚本)  ------> mysqld_safe(脚本)  ------>mysqld(服务)
        mysqladmin -uroot -p123456 shutdown    #关闭mysql
        mysqladmin -uroot -p password 123456   #设置登陆密码
       select user,host from mysql.user;   #查询数据库中的用户(mysql用户由用户名@'主机域'组成)
       删除没有设置密码的账户:drop user ''@'db01';  drop user ''@'localhost';  drop user 'root'@'db01';  drop user 'root'@'::1';  drop user 'root'@'127.0.0.1';

    九、CentOS7安装Mysql-5.7-glibc版本

    [root@localhost ~]# yum install libaio
    [root@localhost ~]# useradd -s /sbin/nologin  -M mysql
    [root@localhost ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
    [root@localhost ~]# tar -xvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
    [root@localhost ~]# mv mysql-5.7.27-linux-glibc2.12-x86_64 /usr/local/mysql
    [root@localhost ~]# cp /usr/local/mysql/share/english/errmsg.sys /usr/share/mysql/english/errmsg.sys
    [root@localhost ~]# /usr/local/mysql/bin/mysqld --initialize
    2020-09-24T15:45:36.195123Z 1 [Note] A temporary password is generated for root@localhost: kz#T?fqY,3w_
    [root@localhost ~]# /usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
    [root@localhost ~]# mkdir /var/log/mariadb && touch /var/log/mariadb/mariadb.log
    [root@localhost ~]# vim /etc/my.cnf
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    datadir = /usr/local/mysql/data
    [root@localhost ~]# vim /etc/my.cnf.d/mysql-clients.cnf
    [mysql]
    socket=/var/lib/mysql/mysql.sock
    [root@localhost ~]# chown -R mysql:mysql /var/log/mariadb
    [root@localhost ~]# chown -R mysql.mysql /var/lib/mysql
    [root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    [root@localhost ~]# /etc/init.d/mysqld start
    [root@localhost ~]# cat /root/.mysql_secret   #mysql密码找回
    # Password set for user 'root@localhost' at 2020-09-24 23:47:16
    pufYa2_1C=Ei

    参考链接:
           https://www.52wiki.cn/Plate/Info/id/5.html   #MySQL报错
           https://www.cnblogs.com/bigbrotherer/p/7241845.html    #yum安装mysql
           https://downloads.mysql.com/archives/community/   #MySQL Community版下载

  • 相关阅读:
    西南民族大学第十二届程序设计竞赛(同步赛) A.逃出机房 (bfs)
    2020-2021 ICPC, NERC, Southern and Volga Russian Regional Contest (Online Mirror, ICPC Rules) D. Firecrackers (贪心,二分)
    2020-2021 ICPC, NERC, Southern and Volga Russian Regional Contest (Online Mirror, ICPC Rules) C. Berpizza (STL)
    2020 ICPC Asia Taipei-Hsinchu Regional Problem H Optimization for UltraNet (二分,最小生成树,dsu计数)
    2020 ICPC Asia Taipei-Hsinchu Regional Problem B Make Numbers (dfs搜索)
    Codeforces Round #689 (Div. 2, based on Zed Code Competition) E. Water Level (贪心好题)
    Codeforces Round #692 (Div. 2, based on Technocup 2021 Elimination Round 3) C. Peaceful Rooks (思维,dsu找环)
    PAT五一线上模拟测试赛
    【PAT五一线上模拟测试赛】7-3 垃圾分类 (20分) Java和Python
    【PAT五一线上模拟测试赛】7-2 三阶幸福数 (20分) Pyton+Java
  • 原文地址:https://www.cnblogs.com/xwupiaomiao/p/9003153.html
Copyright © 2020-2023  润新知