MYSQL INSTALLATION

MYSQL INSTALLATION

1 下载

mysql 被收购后,不再提供源码,因此不可能再做源码安装。 想进行源码安装,可以选择Mariadb。

Oracle mysql: https://dev.mysql.com/downloads/mysql/

mariadb: https://downloads.mariadb.org/mariadb/+releases/ http://ftp.hosteurope.de/mirror/archive.mariadb.org/ 下载后,上传至服务器并解压。这是一般的步骤。对于不熟悉此操作的,请先熟悉 Linux基本操作.

2 安装

2.1 Mariadb源码安装

使用源码安装,解决依赖是一个前提。所以,服务器可以使用Yum 源,使用源码安装是一个 不错的选择,因为很多选项可以进行配置。比如安装路径。组件选择等。

2.1.1 版本

操作系统 mariadb
7.2.1511 10.1.40
7.5.1804 10.2.25

2.1.2 下载解压

选择需要版本下载. 然后上传至服务器/opt 路径 并解压。比如我解压后的路径是 /opt/mariadb-10.2.25

2.1.3 安装依赖包

rpm -e --nodeps mariadb-libs
yum install -y cmake ncurses-devel gcc gcc-c++ zlib-devel readline-devel openssl-devel libaio-devel mariadb-libs

另外安装依赖于gnutls,p11-kit 两个包。请参阅 编译安装-> 生成makeFile–>错误2 xf*** 创建组、用户、相关目录

groupadd mysql
useradd -g mysql -G mysql -d /home/mysql mysql
mkdir -p /usr/local/mysql
mkdir -p /home/mysql/data
mkdir -p /var/log/mysql
mkdir -p /var/run/mysql
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /home/mysql/data
chown -R mysql:mysql /var/log/mysql
chown -R mysql:mysql /var/run/mysql
chcon -R system_u:object_r:mysqld_db_t:s0 /home/mysql/data

2.1.4 编译安装

  1. 生成makeFile
    # 注意解压后的路径
    cd /opt/mariadb-10.3.15
    
    cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ -DMYSQL_DATADIR=/home/mysql/data -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DSYSCONFDIR=/etc 
    -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_READLINE=1 
    -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_XTRADB_STORAGE_ENGINE=1 -DWITH_FEDERATEDX_STORAGE_ENGINE=1 
    -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STPRAGE_ENGINE=1 -DWITHOUT_TOKUDB=1 -DENABLE_DOWNLOADS=1
    
    错误1
    -- Performing Test HAVE_STDCXX11
    -- Performing Test HAVE_STDCXX11 - Failed
    -- Performing Test HAVE_STDCXX0X
    -- Performing Test HAVE_STDCXX0X - Failed
    CMake Error at storage/tokudb/PerconaFT/cmake_modules/TokuSetupCompiler.cmake:177 (message):
      /usr/bin/c++ doesn't support -std=c++11 or -std=c++0x, you need one that
      does.
    Call Stack (most recent call first):
      storage/tokudb/PerconaFT/CMakeLists.txt:38 (include)
    

    出现以上错误,是由于默认安装了tobudb. 此时,我们加上参数 -DWITHOUT_TOKUDB=1,表示不安装tokudb引擎. tokudb是MySQL中一款开源的存储引擎,可以管理大量数据并且有一些新的特性,这些是Innodb所不具备的,这里之所以不安装, 是因为一般计算机默认是没有Percona Server的,并且加载tokudb还要依赖jemalloc内存优化,一般开发中也是不用tokudb的, 所以暂时屏蔽掉,否则在系统中找不到依赖会出现如上错误。 – notes :: 编译失败后,需要执行 rm -f CMakeCache.txt 以清除编译缓存,才可以继续重新编译。

  2. install(软件安装)
    make && make install
    
    NOTES
    注意事项:
    重新时,需要清除旧的对象文件和缓存信息。 # make clean
    # rm -f CMakeCache.txt
    # rm -rf /etc/my.cnf
    
  3. 配置服务

    安装好后,可用于systemctl或者service 服务的文件会自动生成:<path>/support-files/mysql.server
    将此文件复制至/etc/init.d/ 路径即可。

    cd /usr/local/mysql
    cp support-files/mysql.server /etc/init.d/mysqld
    

2.1.5 安装数据库

scripts/mysql_install_db --user=mysql --datadir=/home/mysql/data

2.1.6 修改环境变量

这里我将Mysql的bin 路径加载到了系统默认加载路径中。看官们自己决定添加位置

vi /etc/profile
# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
    pathmunge /usr/local/mysql/bin    --> 添加此行
else
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
fi
source /etc/profile

2.1.7 配置参数文件

2.1.8 启动

/etc/init.d/mysqld start

2.2 Mariadb rpm包安装

在不能使用yum源的时候,只能选择使用rpm 包安装。
需要下载的几个包为:

  • MariaDB-<version>-<platform>-x86_64-client.rpm
  • MariaDB-<version>-<platform>-x86_64-common.rpm
  • MariaDB-<version>-<platform>-x86_64-compat.rpm
  • MariaDB-<version>-<platform>-x86_64-server.rpm
  • boost-program-options-<version>-*.x86_64.rpm
  • galera-<version>-1.<release>.*.x86_64.rpm

上传至服务器放到同一个路径下比如:mariadb_install_package,然后通过rpm安装:

2.2.1 安装rpm包

cd mariadb_install_package
rpm -ivh ./*.rpm

2.2.2 配置为服务项

cp /usr/lib/systemd/system/mariadb.service /etc/init.d/mariadb
systemctl start mariadb
systemctl status mariadb
systemctl stop mariadb

2.3 Mysql 5.7 安装

2.3.1 RPM包安装

RPM 建议下载RPM bundle 版本的。否则在安装过程中出现依赖关系而安装失败,会很头疼。 RPM bundle版本中包含了所有的安装需要的rpm包. 根据需要可以单独下载:

mysql-community-server-5.7.21-1.el7.x86_64.rpm
mysql-community-common-5.7.21-1.el7.x86_64.rpm
mysql-community-client-5.7.21-1.el7.x86_64.rpm
mysql-community-libs-5.7.21-1.el7.x86_64.rpm

安装

rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm mysql-community-common-5.7.21-1.el7.x86_64.rpm mysql-community-client-5.7.21-1.el7.x86_64.rpm mysql-community-libs-5.7.21-1.el7.x86_64.rpm

2.3.2 编辑配置文件

配置文件内容详情请参阅 配置文件

2.3.3 配置mysqld.service

执行以下几个命令:

systemctl enable mysqld  # 设置开机启动
systemctl stop mysqld    # 停止mysql服务
systemctl start mysqld   # 启动mysql服务

需要注意的是尽量先调整好配置文件再启动mysql数据库。rpm 包安装的mysql,会在第一次启动的时候进行数据库初始化。生成最原始的mysql数据库文件及日志文件等。

2.3.4 修改root用户密码

  1. 在没有调整my.cnf时

    grep "temporary password" /var/log/mysqld.log    #命令,返回结果最后冒号后面的字符串就是root的默认密码
    mysql -uroot -p                                  # 回车,输入上面找到的密码
    set password=password('密码');
    flush privileges;
    
  2. 调整过my.cnf 调整过my.cnf后,可能日志已经不在/var/log/mysqld.log 中。这时我们的日志不是固定的。有的人找不到日志的位置。因此可以通过直接修改mysql.user 内部表来实现修改密码。
    1. 调整my.cnf 在my.cnf 的[mysqld] 下面添加一行:skip-grant-tables

      [mysqld]
      skip-grant-tables
      .........
      
    2. 重启mysqld

      systemctl restart mysqld
      
    3. 登录mysql修改密码

      mysql -e "update mysql.user set authentication_string=password('密码') where user='root';"
      
    4. 恢复my.cnf 将skip-grant-tables 前面加上# 以注释掉此参数。如:

      [mysqld]
      # skip-grant-tables
      
    5. 重启mysql

      systemctl restart mysqld
      

2.4 Mysql 5.6 安装

2.4.1 解压安装

tar -xvf MySQL-5.6.39-1.el7.x86_64.rpm-bundle.tar
rpm -ivh ./MySQL*.rpm

2.4.2 配置参数文件

配置文件内容详情请参阅 配置文件

2.4.3 初始化数据库

/usr/bin/mysql_install_db --user=mysql --datadir=/data --keep-my-cnf

2.4.4 启动数据库

service mysql start

2.5 准备配置文件内容

一般情况下,配置文件的内容,除server_id,auto_increment* 需要根据节点数来调整, relay_log_purge需要根据架构来调整外,其他无需调整。

参数会随着版本的改动而有所变动。所以这里的配置,也不是铁律,要根据版本进行调整 ,最后得到最适合自己的环境的配置。

[mysqld]
datadir=/data
socket=/var/lib/mysql/mysql.sock
init-connect='SET NAMES utf8'
character-set-server=utf8
lower_case_table_names = 1
symbolic-links=0

# Tunning settings
#innodb storage configuration
default-storage-engine=innodb
innodb_file_per_table=1
innodb_flush_log_at_trx_commit=2
innodb_flush_method=O_DIRECT
innodb_log_buffer_size=256M
innodb_log_files_in_group=8
transaction_isolation=READ-COMMITTED

# Connection configurations
max_connections=1000
max_connect_errors=10000

# query related
query_cache_type=1
query_cache_size=128M
long_query_time=1

#Memory Configuration
## For temp table
max_heap_table_size=96M
tmp_table_size=96M
## For sort / join / read
sort_buffer_size=5M
join_buffer_size=5M
read_buffer_size=5M
read_rnd_buffer_size=5M

# For Myiasm if be used
key_buffer_size=52M

# For function
log_bin_trust_function_creators=1

# master — slave configurations
server-id= 48
log-bin=mysql-bin
log-bin-index=mysql-bin.index
binlog_format = MIXED
sync-binlog=1
expire-logs-days = 14
auto_increment_offset=1        # —> 多主结构使用
auto_increment_increment=2 # —> 多主结构使用
skip-slave-start

# 配置半同步复制
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1

# 配置relay log . MHA结构中需要将relay_log_purge 设置为0. 其他主从结构配置为1
relay_log_purge=1
relay_log_recover=1

[mysqld_safe]
log-error=/var/log/mysql/mysql.log
pid-file=/var/run/mysql/mysql.pid

2.6 维护管理员用户

管理员用户默认是root, 拥有最高的Mysql 管理权限。如果在最开始没有设置密码。同时,有可能有人会更喜欢使用root密码,如果他没有密码,那么 他很可能,把root密码改掉。此时我们便没有了管理权限。

以防万一
  1. 设置一个没有人知道的root密码,虽然对于蓄意修改root密码的人来说,这没什么卵用。
  2. 添加一个新管理员用户

    insert into mysql.user ( Host,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,Show_db_priv,Super_priv,Create_tmp_table_priv,Lock_tables_priv,Execute_priv,Repl_slave_priv,Repl_client_priv,Create_view_priv,Show_view_priv,Create_routine_priv,Alter_routine_priv,Create_user_priv,Event_priv,Trigger_priv,Create_tablespace_priv,ssl_type,ssl_cipher,x509_issuer,x509_subject,max_questions,max_updates,max_connections,max_user_connections,plugin,authentication_string,password_expired,password_last_changed,password_lifetime,account_locked)
    values('localhost','dbadmin','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0','mysql_native_password','','N','2019-11-22 18:07:06',NULL,'N' );
    

3 ERRORS

3.1 Can't open and lock privilege tables: Table 'mysql.XXX' doesn't exist

这个问题一般是因为数据库初始化未完成。

默认初始化命令: scripts/mysql_install_db –basedir=<basedir> –datadir=<datadir> –user=mysql

Author: halberd

Created: 2020-02-26 Wed 21:32

Validate

原文地址:https://www.cnblogs.com/halberd-lee/p/12369186.html