MySQL 在 Linux 上的安装
方式1:基于特定的 glibc 版本编译的二进制安装包,访问下载网站,选择不同的版本
方式2:特定 linux 版本下编译的 rpm 版本,MySQL Yum Repository YUM 源 在线安装
方式2修正:如果服务器不能访问公网,则通过YUM源下载到本地,然后上传服务器,通过 rpm 命令安装
方式2修正:手工从官网下载相关的 rpm 包,注意选择版本,OS 等
只需要下载以下4个文件:
- mysql-community-client-5.7.28-1.el7.x86_64.rpm
- mysql-community-common-5.7.28-1.el7.x86_64.rpm
- mysql-community-libs-5.7.28-1.el7.x86_64.rpm
- mysql-community-server-5.7.28-1.el7.x86_64.rpm
glibc 版本安装
从官网直接下载包mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
安装步骤
$ sudo useradd -r mysql -s /sbin/nologin $ groups mysql mysql : mysql $ sudo mkdir -p /u01/app /u01/soft /u02/mysqldata $ rpm -q glibc glibc-2.17-78.el7.x86_64 $ cd /u01/soft; tar -xf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz $ ln -sv /u01/soft/mysql-5.7.28-linux-glibc2.12-x86_64 /u01/app/mysql '/u01/app/mysql' -> '/u01/soft/mysql-5.7.28-linux-glibc2.12-x86_64' $ chown -R mysql:mysql /u01/app/mysql $ chown -R mysql:mysql /u02/mysqldata $ cd /u01/app/mysql/bin ./mysqld --initialize --basedir=/u01/app/mysql --datadir=/u02/mysqldata --user=mysql --explicit_defaults_for_timestamp $ ls /u02/mysqldata/
mysqld.service 服务
$ more /usr/lib/systemd/system/mysqld.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) 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=/var/run/mysqld/mysqld.pid # Disable service start and stop timeout logic of systemd for mysqld service. TimeoutSec=0 # Execute pre and post scripts as root PermissionsStartOnly=true # Needed to create system tables ExecStartPre=/usr/bin/mysqld_pre_systemd # Start main service ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS # Use this to switch malloc implementation EnvironmentFile=-/etc/sysconfig/mysql # Sets open_files_limit LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false
rpm 版本安装
下载 rpm 安装包
下载 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
安装 MySQL 源 sudo yum localinstall mysql57-community-release-el7-11.noarch.rpm
检查 MySQL 源是否安装成功
$ sudo yum repolist enabled | grep "mysql.*-community.*" mysql-connectors-community/x86_64 MySQL Connectors Community 118 mysql-tools-community/x86_64 MySQL Tools Community 95 mysql57-community/x86_64 MySQL 5.7 Community Server 364
下载全部依赖包到本地目录(vagrant centos7)
安装插件 sudo yum install yum-plugin-downloadonly
下载依赖包 sudo yum install -y --downloadonly --downloaddir=/mysql57 mysql-community-server
$ yum -h
-y, --assumeyes 回答全部问题为是
--downloadonly 仅下载而不更新
--downloaddir=DLDIR 指定一个其他文件夹用于保存软件包
只保留 mysql 开头的 rpm 包,删除其余 rpm 包
# rpm -qa |grep mysql mysql-community-common-5.7.28-1.el7.x86_64 mysql-community-libs-compat-5.7.28-1.el7.x86_64 mysql-community-libs-5.7.28-1.el7.x86_64 mysql-community-server-5.7.28-1.el7.x86_64 mysql-community-client-5.7.28-1.el7.x86_64 # rpm -qa |grep mysql|tr '\n' ' ' # rpm -e --nodeps mysql-community-server-5.7.28-1.el7.x86_64 mysql-community-common-5.7.28-1.el7.x86_64 mysql-community-client-5.7.28-1.el7.x86_64 mysql-community-libs-compat-5.7.28-1.el7.x86_64 mysql-community-libs-5.7.28-1.el7.x86_64 $ ls -lh *.rpm -rw-r--r-- 1 vagrant vagrant 25M 7月 18 10:59 mysql-community-client-5.7.28-1.el7.x86_64.rpm -rw-r--r-- 1 vagrant vagrant 275K 7月 18 10:59 mysql-community-common-5.7.28-1.el7.x86_64.rpm -rw-r--r-- 1 vagrant vagrant 2.2M 7月 18 11:00 mysql-community-libs-5.7.28-1.el7.x86_64.rpm -rw-r--r-- 1 vagrant vagrant 2.1M 7月 18 11:00 mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm -rw-r--r-- 1 vagrant vagrant 166M 7月 18 11:00 mysql-community-server-5.7.28-1.el7.x86_64.rpm
上传 sshpass -p mima scp -P1122 -o StrictHostKeyChecking=no ./*.rpm root@192.168.1.23:./mysql/
目标机执行 sudo rpm -ivh *.rpm --nodeps --force
$ sudo rpm -ivh *.rpm --nodeps --force 警告:mysql-community-client-5.7.27-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:mysql-community-common-5.7.27-1.e################################# [ 20%] 2:mysql-community-libs-5.7.27-1.el7################################# [ 40%] 3:mysql-community-client-5.7.27-1.e################################# [ 60%] 4:mysql-community-server-5.7.27-1.e################################# [ 80%] 5:mysql-community-libs-compat-5.7.2################################# [100%]
目标机开启启动 systemctl enable mysqld
, 启动服务 systemctl start mysqld
, 查看状态 systemctl status mysqld
修改 root 本地账户密码
安装完成后,生成的默认密码在 /var/log/mysqld.log 文件中。使用 grep 'temporary password' /var/log/mysqld.log
命令找到日志中的密码。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'A1765527-61a0';
注意:mysql 5.7 默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位(建议使用 uuidgen 生成一个)。否则会提示 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 错误。
update mysql.user set host='localhost' where user='root'; flush privileges; -- 只允许root在本机登录 update mysql.user set host='%' where user='root'; flush privileges; -- 允许root远程访问
参考脚本
#!/usr/bin/env bash yum install -y libaio* cp my.cnf /etc/my.cnf rpm -ivh *.rpm --nodeps --force chown mysql:mysql /var/lib/mysql systemctl daemon-reload systemctl enable mysqld # systemctl is-enabled mysqld systemctl start mysqld grep 'temporary password' /var/lib/mysql/mysqld.log password=$(grep -oP 'temporary password(.*): \K(\S+)' /var/lib/mysql/mysqld.log) newpwd=$(grep -oP '\bPassword\s*=\s*"\K[^"]+' ../mysqlclusterinit/config.toml) mysqladmin --user=root --password="$password" password "$newpwd"
参考
- CentOS 7 下 MySQL 5.7 的安装与配置
- Installing a package forcefully without dependencies
- 基于 Linux 安装glibc版mysql 5.7.12
- Linux: Check the glibc version
- MySQL 5.7 — Native Systemd Support
- MySQL 客户端无密码登录
Removing the MySQL root password
On MySQL 5.7:
password=$(grep -oP 'temporary password(.*): \K(\S+)' /var/log/mysqld.log) mysqladmin --user=root --password="$password" password aaBB@@cc1122 mysql --user=root --password=aaBB@@cc1122 -e "UNINSTALL PLUGIN validate_password;" mysqladmin --user=root --password="aaBB@@cc1122" password ""
On MySQL 8.0:
password=$(grep -oP 'temporary password(.*): \K(\S+)' /var/log/mysqld.log) mysqladmin --user=root --password="$password" password aaBB@@cc1122 mysql --user=root --password=aaBB@@cc1122 -e "UNINSTALL COMPONENT 'file://component_validate_password';" mysqladmin --user=root --password="aaBB@@cc1122" password ""
查看 MySQL 服务加载 my.cnf 的地址位置
How do I find the MySQL my.cnf location
$ mysqladmin --help ... Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf ...
Table 4.2 Option Files Read on Unix and Unix-Like Systems
File NamePurpose /etc/my.cnf
官网说:从5.7.18开始不在二进制包中提供 my-default.cnf 文件。参考:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
经过测试,在5.7.18版本中,使用 tar.gz 安装时,也就是压缩包解压出来安装这种,已经不再需要 my.cnf 文件也能正常运行。
my.cnf 文件就是把在命令行上启动MySQL时后面的参数用cnf文件配置好,那么下载启动时就不再需要在命令上加如参数。
这个my.cnf文件可以是自定义位置,也可以使用如下默认的位置,只要放在默认位置,MySQL 自动识别(通过 deb 或者 APT 源安装的,初始位置在下方列表):
在 Unix 和类 Unix 系统上读取选项文件
文件名目的 /etc/my.cnf
gossh 脚本
$ export GOSSH_HOSTS="192.168.1.(1 3 5):8022 root/root id=(1 3 5)" $ export em="\!"; export sq="'"; export dq='"'; $ export GOSSH_CMDS="%host MYSQL_PWD='62A56623CA8c' mysql -uroot -h127.0.0.1 -P9633 -vvv -e ${dq}show variables like 'slave_parallel%'${dq}" $ gossh
my.cnf 在 mysqld 段配置增加参数脚本:
echo "\nslave_parallel_type=LOGICAL_CLOCK\nslave_parallel_workers=10\nsync_binlog=0\ninnodb_flush_log_at_trx_commit=2\ninnodb_flush_log_at_timeout=1800\n" > mts.cnf mv /etc/my.cnf /etc/my.cnf.bck sed '/\[mysqld\]/ r mts.cnf' /etc/my.cnf.bck > /etc/my.cnf
安装失败,看错误日志
查看指定时间的日志
可以使用 --since 和 --until 选项过滤任意时间限制,这些限制分别显示给定时间之前或之后的条目。
例如: #"显示2017年10月30号,18点10分30秒到当前时间之间的所有日志信息"
`journalctl --since="2017-10-30 18:10:30"`
另外,journal 还能够理解部分相对值及命名简写。例如,大家可以使用 “yesterday”、“today”、“tomorrow” 或者 “now” 等表达。另外,我们也可以使用 “-” 或者 “+” 设定相对值,或者使用 ago 之前的表达。
例如获取昨天的日志如下:
journalctl –since yesterday
获取某一个时间段到当前时间的前一个小时的日志
journalctl --since 09:00 --until "1 hour ago"
获取当前时间的前20分钟的日志
journalctl --since "20 min ago"
获取某一天到某一个时间段的日志信息
journalctl --since "2017-01-10" --until "2017-01-11 03:00"
如您所见,定义灵活的时间窗口来过滤您希望看到的条目相对容易。
按消息兴趣过滤
我们在上面学习了一些可以使用时间限制来过滤日记数据的方法。在本节中,我们将讨论如何根据您感兴趣的服务或组件来进行过滤。systemd日记提供了多种方法来执行此操作。
按服务
也许最有用的过滤方式是你感兴趣的单位。我们可以使用这个-u选项来过滤。
例如,查看httpd服务的日志信息
[root@centos7 ~]# journalctl -u httpd.service -- Logs begin at Thu 2018-02-22 17:01:47 CST, end at Thu 2018-02-22 17:30:01 CST. -- Feb 22 17:29:27 centos7.localdomain systemd[1]: Starting The Apache HTTP Server... Feb 22 17:29:27 centos7.localdomain httpd[1610]: AH00558: httpd: Could not reliably determine t Feb 22 17:29:28 centos7.localdomain systemd[1]: Started The Apache HTTP Server.
也可以查看httpd服务当天的运行状况
journalctl -u httpd.service --since today
参考
查看一个动态库so是否存在
$ gossh --hosts="192.168.1.1:(21061-21063) root/123" --cmds="%host ldconfig -p | grep libnuma" --- 192.168.1.1:21061 --- # ldconfig -p | grep libnuma libnuma.so.1 (libc6,x86-64) => /lib64/libnuma.so.1 # --- 192.168.1.1:21062 --- # ldconfig -p | grep libnuma # --- 192.168.1.1:21063 --- # ldconfig -p | grep libnuma # % $ gossh --hosts="192.168.1.1:(21061-21063) root/123" --cmds="%host-1 ls -lh /lib64/libnuma.so.1" --- 192.168.1.1:21061 --- # ls -lh /lib64/libnuma.so.1 -rwxr-xr-x 1 root root 50K Apr 11 2018 /lib64/libnuma.so.1 # %
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 容错,高可用和灾备
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论