1.mysql安装
1.Mysql下载
官网下载:https://dev.mysql.com/downloads/mysql/
这里说明一下:通过作为DBA一般会下载Linux-Generic版本进行安装(Linux操作系统中),除非有特殊的场景需要用源码包安装,否则95%以上的都用二进制包安装,因为官方已有说明进行官方编译器编译后的二进制包安装的Mysql性能不会比人工手动编译的源码包安装的差!
2.Mysq安装
2.0 Mysql规划
首先我们需要把mysql软件安装位置和mysql数据存储的位置分开,例如我们可以重新找一个新的磁盘专门存储mysql数据,具体看自己操作,比如我:将安装软件放在/appcation目录下 (该目录需要自己创建),然后创建一个软连接 ( ln -s mysql安装目录的绝对路径 /usr/local/mysql )
2.1 创建目录
2.1.1 创建mysql软件安装目录,然后将Mysql的安装目录进行软连接
–>mkdir /appcation
–>ln -s mysql安装目录的绝对路径 /usr/local/mysql
2.2.2 创建mysql数据存储目录(如果是新磁盘会通过挂载实现,一般挂载点会使/data)
数据存储本人一般会放在/data目录下(该目录需要自己创建:mkdir /data)
2.2.3 授予权限
2.2.3.1 创建一个mysql用户和用户组
–>useadd -M mysql -s /sbin/nologin
2.2.3.2 分别对上面的两个目录授权
–>chown -R mysql.mysql /appcation
–> chown -R mysql.mysql /data
2.2.4 配置环境变量
配置环境的变量的目的是可以在linux服务器下的任何一个路径下执行Mysql的各种命令,而不需要用Mysql的绝对路径去执行
vim /etc/profile
Mysql=/usr/local/mysql
PATH=$PATH:$Mysql/bin
export PATH
2.3 初始化
注意初始化,我们一般分两种不同的情况
5.6 版本 –> /mysql/scripts/mysql_install_db –user=mysql –basedir=/app/mysql –datadir=/data
5.7 版本 –> mysqld –initialize –user=mysql –basedir=mysql安装目录 –datadir=/data/mysql/data ###这里会生成临时密码(该密码可以在错误日志中找到)
–initialize-insecure:表示不用生成临时密码
2.4 配置文件(最基础的配置,后面会有详细的)
/etc/my.cnf [mysqld]
user=mysql basedir= datadir= server_id=1 port=3307
log-file= ##根据自己的实际情况进行配置
socket=
pid-file= [mysql] socket=/tmp/mysql.sock
这里要重要说明一下:如果我们的服务器只运行单实例的Mysql服务的话,我们可以直接在/erc/my.cnf中进行如上配置,但是在生产上这种情况很少会发生,因为我们通常会在服务器上跑多实例Mysql
因此,一般我们会在前面的数据目录下配置:/data/mysql/{3307,3308,3309,3310}/my.cnf ,这样我们就可以配置4个mysql实例了。
2.5.mysql 启动
mysql启动一般有两种:
对于centos7以下的版本,我们一般会用sys 管理启动方式 ,首先我们去mysql的安装目录中找到/application/mysql/support-files目录,这个目录下面有一个mysql.serrver文件
我们将它移动到/etc/init.d目录下并改名为myqld –> mv mysql.server /etc/init.d/mysqld
然后我们就可以通过命令 —–> service mysqld start/stop/status 进行启动/停止/查看状态
思考:centos6中怎样多实例启动Mysql服务?
对于centos7版本我们一般会用systemd方式管理
添加一个文件在 /etc/systemd/system目录下 命名为mysqld.service,如果是多实例的话,可以命令为mysqld3307.service、mysqld3308.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 ExecStart=/opt/mysql-5.7.18/bin/mysqld --defaults-file=/etc/my.cnf //只修改此处路径即可,安装路径根据自己的情况而定。 LimitNOFILE = 5000
然后我们就可以通过systemd start/stop/status mysqld3307 进行操作。
说明:
目前:由于Mysql5.7的普及,基本上以前使用的Mysql5.5、Mysql5.6现在都会升级到Mysql5.7甚至现在还有新安装的Mysql8.0,并且大部分公司用的服务器的Linux发行版本都是基于Centos
且大部分都是Centos7版本,不过也有一些公司用的是debian版本。但是本系列关于Mysql的讲解都是关于Centos7-Mysql5.7(适当的说一些Mysql8.0的特性)。
附上启动过程:
[root@node01 ~]# systemctl status mysqld3307 ● mysqld3307.service - MySQL Server Loaded: loaded (/etc/systemd/system/mysqld3307.service; disabled; vendor preset: disabled) Active: active (running) since Sat 2021-06-12 05:56:07 CST; 3h 30min ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Main PID: 1172 (mysqld_safe) CGroup: /system.slice/mysqld3307.service ├─1172 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf └─1625 /usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/usr/local/mysql --datadir=/data/3307... Jun 12 05:56:07 node01 systemd[1]: Started MySQL Server. Jun 12 05:56:07 node01 mysqld_safe[1172]: 2021-06-11T21:56:07.915276Z mysqld_safe Logging to '/data/3307/error.log'. Jun 12 05:56:07 node01 mysqld_safe[1172]: 2021-06-11T21:56:07.954366Z mysqld_safe Starting mysqld daemon with databases f...7/data Hint: Some lines were ellipsized, use -l to show in full.
3.Mysql安全加固
3.1修改初始密码(此处针对临时密码和空密码的情况)
–>Mysql -uroot -p -S /data/mysql/3307/mysqld.socket ##本地通过socket进行登录。
–>mysqladmin -uroot -p password ‘密码’;或者用如下命令 ##修改密码
–>alter user root@localhost identified by ‘新密码’;
3.2 删除非root或非localhost的用户
具体可以通过select user,host from mysql.user 命令可以看当前Mysql用户状态
–>delete from mysql.user where user !=’root’ or host !=’localhost’ ; ##删除非root或者非localhost的用户
4.数据库密码忘记怎么处理?
4.1.先关闭数据库
–>systemctl stop mysqld3307
4.2.启动数据库到维护模式:
–>skip-grant-tables # 跳过授权表
–>skip-networking # 跳过远程登录
–>mysqld_safe –skip-grant-tables –skip-networking &
4.3.加载授权表:
–>flush privileges;
4.4.修改密码
–>alter user root@’localhost’ identified by ‘新密码’;
5.基本配置文件
[mysqld]
basedir=/application/mysql
datadir=/data/mysql/3308/data
socket=/data/mysql/3308/mysql.sock
port=3308
log-error=/data/mysql/3308/mysql_err.log
secure-file-priv=/tmp
pid-file=/data/mysql/3308/mysql.pid
log_bin=/data/mysql/3308/binlog/mysql-bin
binlog_format=row
skip-name-resolve
server-id=8
autocommit=0
gtid-mode=on ##开启GTID模式
enforce-gtid-consistency=true
log-slave-updates=
read_only=on #####建议从库只读
###以下的参数配置可以适当添加(在从库配置中)
master_info_repository=TABLE
relay_log_info_repository=TABLE
slave-skip-errors = 1133
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
[client] socket=/data/mysql/3308/mysql.sock
这里补充一下:关于mysqld_safe 和mysqld启动的不同
- 首先直接用mysqld命令启动mysql server时,在linux后台会发现关于mysqld进程只有一个,而用mysql_safe启动mysql server时,在linux后台会发现关于mysqld进程有两个
- 直接运行mysqld程序来启动MySQL服务的方法很少见,mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。
mysqld_safe其实主要做如下几件事
- 检查系统和选项
- 检查MyISAM表
- 保持MySQL服务器窗口
- 启动并监视mysqld,如果因错误终止则重启。
- 将mysqld的错误消息发送到数据目录中的host_name.err 文件。
- 将mysqld_safe的屏幕输出发送到数据目录中的host_name.safe文件。
【mysqld】:是mysql的核心程序,用于管理mysql的数据库文件以及用户的请求操作。mysqld可以读取配置文件中的[mysqld]的部分
【mysqld_safe】:相当于多了一个守护进程,mysqld挂了会自动把mysqld进程拉起来