literwave game.

一次mysql源码安装

Word count: 864Reading time: 3 min
2022/11/27
  • 需要准备的条件

    • cmake
    • gcc
    • boost1.59.0
  • 这里贴出我对应的依赖版本(由于图片加载太慢了)

    1
    2
    camke version 3.25.0-rcl
    gcc (GCC) 12.2.0
  • mysql版本对应的依赖boost版本必须要匹配,编译过程如果有报错信息boost要求对应的版本

  • 这里选择的是mysql5.7.17,mysql源码链接

  • boost对应的版本库,选择需要的版本对应download就行,boost版本

  • 下载对应好需要的依赖就行,就开始解压过程,以mysql源码为例子

    1
    2
    3
    cd /home/soft/
    wget https://github.com/mysql/mysql-server/archive/mysql-5.7.17.tar.gz
    tar xzfv mysql-5.7.17.tar.gz
  • 这个时候需要给mysql一些文件权限,不然mysql如何操作文件呢?

    1
    2
    3
    cd mysql-server-mysql-5.7.17/
    groupadd mysql
    useradd -r -g mysql -s /bin/false mysql
  • 配置mysql预编译参数

    • 创建mysql数据存储目录

      1
      mkdir -p /usr/local/mysql/data
    • 预编译参数(根据自身依赖的情况,去选择文件路径)

      1
      2
      3
      4
      5
      6
      7
      8
      cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
      -DMYSQL_DATADIR=/usr/local/mysql/data \
      -DWITH_BOOST=/data/soft/boost_1_59_0 \
      -DSYSCONFDIR=/etc \
      -DEFAULT_CHARSET=utf8mb4 \
      -DDEFAULT_COLLATION=utf8mb4_general_ci \
      -DENABLED_LOCAL_INFILE=1 \
      -DEXTRA_CHARSETS=all
    • 编译并安装

      1
      2
      make -j `grep processor /proc/cpuinfo | wc -l`
      make install
    • 编译完成后

      1
      2
      3
      4
      5
      6
      7
      8
      cd /usr/local/mysql
      chown -R mysql:mysql .
      # 注意:MySQL 5.7.6之前的版本执行这个脚本初始化系统数据库
      ./bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

      chown -R root .
      chown -R mysql data
      chmod -R 777 data
    • 新建配置文件

      1
      vim /etc/my.cnf
    • 新建日志文件

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      mkdir -p /usr/local/mysql/log
      cd /usr/local/mysql/log
      touch mysql_error.log
      touch mysql_slow.log

      cd ..

      chown -R mysql log
      chmod -R 777 log

    • 配置文件内容innodb_buffer_pool_size注意下 看自己内存有多少,再分配,以防内存不够报错。skip-grant-tables这里跳过mysql验证的配置,方便我们到时候改密码

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      [client]
      port=3306
      socket=/usr/local/mysql/mysql.sock
      [mysqld]
      character-set-server=utf8
      collation-server=utf8_general_ci

      skip-external-locking
      skip-name-resolve
      skip-grant-tables

      federated
      explicit_defaults_for_timestamp = 1

      user=mysql
      port=3306
      basedir=/usr/local/mysql
      datadir=/usr/local/mysql/data
      tmpdir=/usr/local/mysql/temp
      # server_id = .....
      socket=/usr/local/mysql/mysql.sock
      log-error=/usr/local/mysql/log/mysql_error.log
      pid-file=/usr/local/mysql/mysql.pid
      open_files_limit=10240
      back_log=600
      max_connections=500
      max_connect_errors=6000
      wait_timeout=605800
      #open_tables=600
      #table_cache = 650
      #opened_tables = 630

      max_allowed_packet=32M
      sort_buffer_size=4M
      join_buffer_size=4M
      thread_cache_size=300
      query_cache_type=1
      query_cache_size=256M
      query_cache_limit=2M
      query_cache_min_res_unit=16k

      tmp_table_size=256M
      max_heap_table_size=256M

      key_buffer_size=256M
      read_buffer_size=1M
      read_rnd_buffer_size=16M
      bulk_insert_buffer_size=64M

      lower_case_table_names=1

      default-storage-engine=INNODB

      innodb_buffer_pool_size=1G
      innodb_log_buffer_size=32M
      innodb_log_file_size=128M
      innodb_flush_method=O_DIRECT
      #####################
      #thread_concurrency=32
      long_query_time=2
      slow-query-log=on
      slow-query-log-file=/usr/local/mysql/log/mysql_slow.log

      [mysqldump]
      quick
      max_allowed_packet=32M

      [mysqld_safe]
      log-error=/var/log/mysqld.log
      pid-file=/var/run/mysqld/mysqld.pid
    • 配置mysql服务

      1
      2
      3
      cp support-files/mysql.server /etc/init.d/mysqld
      chkconfig --add mysqld # 添加到系统服务
      chkconfig mysqld on # 开机启动
    • 接下来我们就可以使用systemctl start mysqld启动服务了,但是每个人安装不一样,总会有不同的报错,这个时候看下tail -f /var/log/mysqld.log看下对应报啥错,有时候大多是忘记设计权限了

      1
      2
      3
      4
      5
      systemctl restart mysqld -- 重启mysql
      systemctl stop mysqld -- 停止mysql服务
      systemctl status mysqld -- 查看mysql服务状态

      systemctl daemon-reload -- 如果重新设置了服务,可以使用这个重载一下
    • 配置一下可以直接使用mysql的命令吧

      1
      2
      3
      4
      vim /etc/profile

      export PATH=$PATH:/usr/local/mysql/bin
      source /etc/profile
    • 接下来就是更改密码了

    • 因为我们配置了skip-grant-tables,所以第一次认证,直接使用这样的

      1
      2
      mysql -uroot -p
      回车
    • 设置新密码

      1
      2
      3
      4
      use mysql;
      update user set authentication_string=password('新密码') where user='root';
          flush privileges;

    • 注意把skip-grant-tables注释掉,重新启动mysql服务

    • 重新编译记得清下编译的时候的缓存文件

      1
      2
      3
      cd /data/soft/mysql
      rm -f CMakeCache.txt
      make clean
  • mysql安装完毕,接下来查看下mysql进程

    1
    ps -aux | grep mysql
  • 一些报错产生的原因,可以参考这个博客,报错原因