MYSQL INSTALLATION
Table of Contents
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 编译安装
- 生成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 以清除编译缓存,才可以继续重新编译。
- install(软件安装)
make && make install
- NOTES
注意事项: 重新时,需要清除旧的对象文件和缓存信息。 # make clean # rm -f CMakeCache.txt # rm -rf /etc/my.cnf
- 配置服务
安装好后,可用于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用户密码
在没有调整my.cnf时
grep "temporary password" /var/log/mysqld.log #命令,返回结果最后冒号后面的字符串就是root的默认密码 mysql -uroot -p # 回车,输入上面找到的密码 set password=password('密码'); flush privileges;
- 调整过my.cnf
调整过my.cnf后,可能日志已经不在/var/log/mysqld.log 中。这时我们的日志不是固定的。有的人找不到日志的位置。因此可以通过直接修改mysql.user 内部表来实现修改密码。
调整my.cnf 在my.cnf 的[mysqld] 下面添加一行:skip-grant-tables
[mysqld] skip-grant-tables .........
重启mysqld
systemctl restart mysqld
登录mysql修改密码
mysql -e "update mysql.user set authentication_string=password('密码') where user='root';"
恢复my.cnf 将skip-grant-tables 前面加上# 以注释掉此参数。如:
[mysqld] # skip-grant-tables
重启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密码改掉。此时我们便没有了管理权限。
- 以防万一
- 设置一个没有人知道的root密码,虽然对于蓄意修改root密码的人来说,这没什么卵用。
添加一个新管理员用户
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
Created: 2020-02-26 Wed 21:32