MySQL 安装

介绍 MySQL 的多种安装方式。


yum 安装 mysql

my.cnf:https://mp.weixin.qq.com/s/tSA-DrWT13GN45Csq2tQoA

0: 先解锁 /etc/passwd 等文件 chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab

1: 下载 yum 文件 (仅CentOS7) wget https://repo.mysql.com//mysql80-community-release-el7-5.noarch.rpm

2: 安装 yum 源 (仅CentOS7) yum -y install mysql80-community-release-el7-5.noarch.rpm

3: 安装 mysql server yum -y install mysql-community-server

4: 启动 mysql sudo systemctl start mysqld

第一次启动mysql会初始化数据库,所以需要点时间

对于CentOS8,从默认源安装mysql8没有密码,可以直接mysql进入使用

对于CentOS7,从官方源安装会生成默认密码,可以通过后面的步骤查看密码并修改

5: 查看 mysql 密码 初始化数据库的时候会为root设置一个默认密码,这个密码在log文件中可以找到

less /var/log/mysqld.log # 查看日志查看密码 会有一行 password is generated XXXXX 或者可以使用下面语句直接提取出密码

grep "password is generated" /var/log/mysqld.log | awk '{print $NF}' 找到密码后可以用以下命令输入密码进入数据库

mysql -uroot -p 第一次进入数据库只能修改密码,不能做任何事

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password'; 这里的新密码不能太简单,因为mysql默认对密码有复杂度要求 mysqladmin -u root -p 旧的密码 password Xjh@911128

可以通过下面命令关闭复杂度要求

show global variables like '%validate_password%'; mysql> set global validate_password.policy=0; # 关闭密码复杂性策略 mysql> set global validate_password.length=4; # 设置密码最低长度为4

6: 获得构建 rpm 包所需的文件

https://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64/mysql-community-server-8.0.27-1.el7.x86_64.rpm

rpm2cpio mysql-community-server-8.0.27-1.el7.x86_64.rpm |cpio -div 可获得 my.cnf loglorated mysql 开机启动等文件

wget https://repo.mysql.com/yum/mysql-8.0-community/el/7/SRPMS/mysql-community-8.0.28-1.el7.src.rpm

wget https://repo.mysql.com/yum/mysql-5.7-community/el/7/SRPMS/mysql-community-5.7.37-1.el7.src.rpm

rpm2cpio mysql-community-8.0.28-1.el7.src.rpm | cpio -div 可获得 spec 文件

二进制安装: https://www.cnblogs.com/dbbull/p/14928726.html

可将 python 以及 go 应用打包成 rpm 包

寻找rpm包的两个常用站点

rpmfind.net

mysql 5.7 官网的 rpm 包,编译时指定了 -DWITH_SYSTEMD=bool 参数,启用 systemd 管理,并且不会安装 mysqld_safe 和 System V 初始化的脚本

-DWITH_SYSTEMD=1 https://dev.mysql.com/doc/refman/8.0/en/using-systemd.html#mysqld-safe-to-systemd-migration

https://www.cnblogs.com/renshengdezheli/p/12981371.html

二进制安装 mysql

应先删除 yum 安装的 mysql rm -rf /etc/my.cnf /etc/mysql

sudo yum install libaio sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql sudo tar zxvf /mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ sudo ln -s mysql-5.7.34-linux-glibc2.12-x86_64 mysql sudo chown -R mysql.root /usr/local/mysql cd mysql sudo bin/mysqld --initialize --user=mysql 要准备 cnf 文件并初始化 bin/mysqld --defaults-file=/opt/mysql/mysql/etc/my.cnf --initialize --user=mysql sudo bin/mysql_ssl_rsa_setup sudo bin/mysqld_safe --user=mysql & sudo cp support-files/mysql.server /etc/init.d/mysql.server

忘记密码: 将 skip-grant-tables 添加到 my.cnf 中的 [mysqld] 里 use mysql; update user set authentication_string = password('Xjh@911128') where user='root';

my.cnf 内容如下:

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
plugin-dir=/usr/local/mysql/lib/plugin
socket=/usr/local/mysql/mysql.sock
symbolic-links=0
log-error=/usr/local/mysql/data/mysql5.7.34_mysqld.err
#skip-grant-tables

[client]
socket=/usr/local/mysql/mysql.sock

[mysqld_safe]
log-error=/usr/local/mysql/data/mysql5.7.34_mysqld_safe.err
pid-file=/usr/local/mysql/data/mysqld.pid
socket=/usr/local/mysql/mysql.sock
malloc-lib=/usr/lib64/libtcmalloc.so

!includedir /etc/my.cnf.d

mysql 开机启动: 在 /usr/lib/systemd/system 里添加名为 mysqld.service 的文件 内容如下:

[Unit]
Description=MySQL Server
Documentation=man:mysqld(7)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=forking

PIDFile=/usr/local/mysql/data/mysqld.pid

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize  --pid-file=/usr/local/mysql/data/mysqld.pid  $MYSQLD_OPTS 

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 15000

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=false

执行 systemctl daemon-reload

另外还有一种开机启动的方法:

cd /etc/init.d/ sudo chmod +x mysql.server sudo chkconfig --add mysql.server sudo chkconfig --level 345 mysql.server on

还要修改最大文件数

https://dev.mysql.com/doc/refman/8.0/en/mysql-server.html https://developer.aliyun.com/article/500979

mysql 使用 tcmalloc 管理内存:

sudo yum -y install lsof gcc make gcc-c++ libunwind gperftools gperftools-devel

使用 mysqld_safe 管理 mysql

方法1:在 my.cnf 中添加 malloc-lib=/usr/lib64/libtcmalloc.so sudo lsof -n |grep tcmalloc 查看是否生效

方法2:修改MySQL启动脚本(根据你的MySQL安装位置而定): vi /usr/local/mysql/bin/mysqld_safe

在# executing mysqld_safe的下一行,加上: export LD_PRELOAD=/usr/local/lib/libtcmalloc.so 保存后退出,然后重启MySQL服务器。

4.使用lsof命令查看tcmalloc是否起效: lsof -n |grep tcmalloc

使用 systemed 管理 Mysql

如果是用 systemctl 启动 mysql 默认是没有 mysqld_safe 的 在启动mysqld之前,执行命令 export LD_PRELOAD=/usr/lib64/libtcmalloc_minimal.so

然后再正常启动mysqld即可,例如/usr/sbin/mysqld --default-file=/etc/my.cnf &

查看是否生效 lsof -p pidof mysqld | grep -i tcmalloc

方法一: 1: sudo systemctl edit mysqld 2: 添加

[Service]
Environment="LD_PRELOAD=/usr/lib64/libtcmalloc_minimal.so.4"

3:sudo systemctl daemon-reload 4:sudo systemctl restart mysqld

方法二: 先停止 mysql sudo systemctl stop mysqld sudo rm -rf /etc/systemd/system/mysqld.service.d sudo systemctl daemon-reload 1: vim /etc/sysconfig/mysql 2: 添加:LD_PRELOAD=/usr/lib64/libtcmalloc_minimal.so.4

测试发现两种方法都无法让 tcmalloc 生效 https://bugs.mysql.com/bug.php?id=92224

上面没有生效的解决办法就是(一般来说不用执行此方法,因为通过 ldconfig -v |grep tcmalloc ldconfig -p | grep libjemalloc有输出):

切换到 root 帐号,echo /usr/lib64 > /etc/ld.so.conf.d/gpeftools.conf

执行 ldconfig ,通过 ldconfig -v |grep tcmalloc 查看到 tcmalloc 已经被加载到库文件中了

因为 mysqld 是用 sudo 执行的,所以只能用 sudo lsof -n |grep tcmalloc 查看到,显示结果如下:

[echoxu@mysql-viewfilx ld.so.conf.d]$ sudo  lsof -p `pidof mysqld` | grep -i tcmalloc
mysqld  1762 mysql  mem       REG              253,3     154776  4782905 /usr/lib64/libtcmalloc_minimal.so.4.4.5

参考:https://dev.mysql.com/doc/refman/8.0/en/using-systemd.html#mysqld-safe-to-systemd-migration

https://www.cnblogs.com/xiaoqiangzhaitai/p/6561708.html

use mysql; update user set host='%' where user='root'; GRANT ALL on *.* To 'root'@'%'; 要执行两次

创建用户:create user 'echoxu' IDENTIFIED BY 'Xjh@911128'; 赋权限:GRANT ALL ON log2excel.* TO 'echoxu'@'%';

编译安装 mysql

https://dev.mysql.com/doc/refman/5.7/en/source-installation-prerequisites.html https://www.cnblogs.com/zzhaolei/p/11068054.html https://www.cnblogs.com/shengdimaya/p/8027507.html https://blog.csdn.net/weixin_45191791/article/details/110136458 https://www.cnblogs.com/gaogao67/p/12148214.html 编译参数优化:https://blog.csdn.net/hzcyclone/article/details/7485643 官方编译参数:https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html#cmake-compiler-flags

mysql8 环境要求:https://dev.mysql.com/doc/refman/8.0/en/source-installation-prerequisites.html

先卸载 mariadb rpm -qa|grep mariadb rpm -e mariadb-libs --nodeps mariadb-libs

MySQL 的线上安装建议采取编译安装的方法,这样性能上有较大提升,,源码包的编译参数会默认以 Debgu 模式生成二进制代码,而 Debug 模式给 MySQL 带来的性能损失是比较大的,所以当我们编译准备安装的产品代码时,一定不要忘记使用“—without-debug”参数禁用 Debug 模式。

而如果把—with-mysqld-ldflags 和—with-client-ldflags 二个编译参数设置为—all-static 的话,可以告诉编译器以静态方式编译和编译结果代码得到最高的性能。

使用静态编译和使用动态编译的代码相比,性能差距可能会达到 5%至 10%之多。

编译参数如下所示(适合 5.4 及之前的版本):

./configure --prefix=/usr/local/[mysql](https://www.mowangchu.cn/tag/mysql/ "View all posts in mysql") \
--without-debug \
--without-bench \
--enable-thread-safe-client \
--enable-assembler \
--enable-profiling \
--enable-community-features \
--with-[mysql](https://www.mowangchu.cn/tag/mysql/ "View all posts in mysql")d-ldflags=-all-static \
--with-client-ldflags=-all-static \
--with-charset=utf8 \ #具体看网站环境决定默认编码
--with-extra-charset=all \
--with-innodb \       #个人博客可以不开启 innodb
--with-csv-storage-engine \
--with-federated-storage-engine \
--with-[mysql](https://www.mowangchu.cn/tag/mysql/ "View all posts in mysql")d-user=mysql \
--without-embedded-server \
--with-server-suffix=-community \
--with-unix-socket-path=/usr/local/mysql/sock/mysql.sock





######
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \ -DSYSCONFDIR=/etc \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysqld.sock \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_PROFILING=1 \
-DMYSQL_TCP_PORT=3306 \
-DWITH_DEBUG=0 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_59_0


####

DCMAKE_INSTALL_PREFIX=/usr/local/mysql :安装路径 
DMYSQL_DATADIR=/data/mysql :数据文件存放位置 
DSYSCONFDIR=/etc :my.cnf路径 
DMYSQL_UNIX_ADDR=/var/lib/mysql/mysqld.sock :连接数据库socket路径 
DEXTRA_CHARSETS=all :安装所有的字符集 
DDEFAULT_CHARSET=utf8 :默认字符 
DDEFAULT_COLLATION=utf8_general_ci :排序集 
DWITH_MYISAM_STORAGE_ENGINE=1 :支持MyIASM引擎 
DWITH_INNOBASE_STORAGE_ENGINE=1 :支持InnoDB引擎 
DWITH_PARTITION_STORAGE_ENGINE=1 :安装支持数据库分区 
DENABLED_LOCAL_INFILE=1 :允许从本地导入数据 
DENABLED_PROFILING=1 : 
DMYSQL_TCP_PORT=3306 :端口 
DWITH_DEBUG=0 : 
DDOWNLOAD_BOOST=1 :允许下载 
DWITH_BOOST=/usr/local/boost_1_59_0 :本地boost路径



######
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \            指定安装目录 
-DMYSQL_DATADIR=/data/mysql_data \				数据库存放目录                 
-DSYSCONFDIR=/usr/local/mysql/conf \					 
-DMYSQL_UNIX_ADDR=/data/mysql_data/mysql.sock \ 
-DSYSTEMD_PID_DIR=/usr/local/mysql \ -DMYSQL_USER=mysql \ 
-DWITH_SYSTEMD=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ 
-DWITH_INNOBASE_STORAGE_ENGINE=1 \			innodb 存储引擎 
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ 
-DWITH_MEMORY_STORAGE_ENGINE=1 \ 
-DWITH_READLINE=1 \ 
-DMYSQL_TCP_PORT=3306 \ 
-DENABLED_LOCAL_INFILE=1 \ 
-DENABLE_DOWNLOADS=1 \ 
-DEXTRA_CHARSETS=all \				安装所有扩展字符集 
-DDEFAULT_CHARSET=utf8mb4 \	使用 utf8 字符 
-DDEFAULT_COLLATION=utf8mb4_general_ci \		校检字符 
-DWITH_DEBUG=0 \ -DMYSQL_MAINTAINER_MODE=0 \ 
-DWITH_SSL:STRING=system \ 
-DWITH_ZLIB:STRING=bundled \ 
-DDOWNLOAD_BOOST=1 \ 
-DWITH_BOOST=./boost
如在编译过程中出现错误信息需删除当前目录下cMakCache.txt文件,解决错误信息后重新编译
以下显示表示编译完成



make -j$(cat /proc/cpuinfo| grep "processor"| wc -l) && make install

mysql 优化

https://imysql.com/2015/05/24/mysql-optimization-reference-1.shtml

https://imysql.com/2015/05/29/mysql-optimization-reference-2.shtml

上次更新:
贡献者: iEchoxu