centos7实现MYSQL的多实例

由于这里是实现mysql多实例,所以安装的话这里就不做过多的讲解了,如果有需要可以看看其他博主的安装教程(mysql的yum源可在mysql官网下载rpm包进行安装)

MySQL :: Download MySQL Yum Repository

前导部分

首先要安装好mysql,我这边是使用yum源安装的

所以就直接yum -y install mysql-server mysql

安装完成后查看一下服务的状态

 

MySQL的服务名称是mysqld,

所以要用systemctl status mysqld查看一下状态

注意:防火墙和selinux都需要关闭!

systemctl status firewalld

这是防火墙在运行 

使用 systemctl stop firewalld 暂时关闭防火墙(重启后失效)

永久关闭防火墙 

systemctl disable firewalld

查看一下selinux状态

 getenforce

临时关闭selinux

getenforce 0

  永久关闭selinux(建议永久关闭,不然下次启动又要重新设置)

先进入selinux配置文件

vim /etc/selinux/config

 进入到配置文件

进行修改

进行实例化的操作

创建mysql实例目录

mkdir -p /data/mysql/330{6,7}/{data,logs,conf,socket,pid}

 结构如下:

你们不一定有tree这个指令,只要文件夹结构对了就行了,这个不重要。

设置目录属主属组

 chown -R mysql:mysql /data/mysql

查看一下

 

 这里可以看出属主属组都是mysql

备份一下mysql的原配置文件

mv /etc/my.cnf /etc/my.cnf_bak

 新增配置文件my3306.cnf

vim /data/mysql/3306/conf/my.cnf

[mysqld]
user = mysql
port = 3306
server_id = 3306
datadir = /data/mysql/3306/data
socket = /data/mysql/3306/socket/mysql.sock
symbolic-links = 0
log-error = /data/mysql/3306/logs/mysqld.log
pid-file = /data/mysql/3306/pid/mysqld.pid

复制一份到3307端口

  cp /data/mysql/3306/conf/my.cnf /data/mysql/3307/conf/my.cnf

修改一下文件内所有3306的内容为3307 

sed -i 's/3306/3307/g' /data/mysql/3307/conf/my.cnf

查看一下3307的配置文件

cat /data/mysql/3307/conf/my.cnf

[mysqld]
user = mysql
port = 3307
server_id = 3307
datadir = /data/mysql/3307/data
socket = /data/mysql/3307/socket/mysql.sock
symbolic-links = 0
log-error = /data/mysql/3307/logs/mysqld.log
pid-file = /data/mysql/3307/pid/mysqld.pid


备份一下服务的启动服务文件

 mv /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service_bak

 新增mysqld3306.service启动文件

 vim /usr/lib/systemd/system/mysqld3306.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=/data/mysql/3306/pid/mysqld.pid
TimeoutSec=0
PermissionsStartOnly=true
#ExecStartPre=/usr/bin/mysqld_pre_systemd_3306 3306
ExecStart=/usr/sbin/mysqld --defaults-file=/data/mysql/3306/conf/my.cnf --daemonize --pid-file=/data/mysql/3306/pid/mysqld.pid $MYSQLD_OPTS
EnvironmentFile=-/etc/sysconfig/mysql
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false

 新增mysqld3307.service启动文件

cp /usr/lib/systemd/system/mysqld3306.service /usr/lib/systemd/system/mysqld3307.service

修改mysql服务文件的文件目录

 sed -i 's/3306/3307/g' /usr/lib/systemd/system/mysqld3307.service

查看内容

cat /usr/lib/systemd/system/mysqld3307.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=/data/mysql/3307/pid/mysqld.pid
TimeoutSec=0
PermissionsStartOnly=true
#ExecStartPre=/usr/bin/mysqld_pre_systemd_3307 3307
ExecStart=/usr/sbin/mysqld --defaults-file=/data/mysql/3307/conf/my.cnf --daemonize --pid-file=/data/mysql/3307/pid/mysqld.pid $MYSQLD_OPTS
EnvironmentFile=-/etc/sysconfig/mysql
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false

 初始化多实例3306,3307

 mysqld --defaults-file=/data/mysql/3306/conf/my.cnf --initialize --user=mysql --datadir=/data/mysql/3306/data

 mysqld --defaults-file=/data/mysql/3307/conf/my.cnf --initialize --user=mysql --datadir=/data/mysql/3307/data

启动多实例3306,3307

 查看一下mysql的服务

netstat -nutpl | grep mysql

ps -ef | grep mysql

 到这里就差不多搞定了

mysql实例登录的方法

mysql登录的话先找到临时密码

cat /data/mysql/3306/logs/mysqld.log | grep password

 由于我之前操作失误了忘记删除l日志文件导致之前的临时密码依旧存在所以有俩个临时密码,但是第一个已经失效了。大家不用管。

然后登录

 mysql  -P 3306 -S /data/mysql/3306/socket/mysql.sock -uroot -p'hX>&f%Rqq3P+'

 这样登录成功了!

另外一个实例也同样按照此方法登录

进入后无法操作数据库,必须要修改密码:

 ALTER USER 'root'@'localhost' identified by "Mysql@2023";

显示ok就代表修改密码成功了。 

### Activity 跳转至 Fragment 时的生命周期方法调用顺序 当从 `Activity` 启动并加载一个新的 `Fragment` 或者在不同 `Fragment` 之间进行切换时,涉及到了一系列复杂的生命周期回调。这些回调不仅发生在目标 `Fragment` 上,也会影响宿主 `Activity` 和其他已存在的 `Fragment`。 #### 宿主 Activity 的变化 - 当启动新组件(如通过 Intent 打开另一个 Activity),原 `Activity` 将依次触发 `onPause()` -> `onStop()` 方法[^4]。 #### 新加入 Fragment 的初始化过程 对于即将显示的新 `Fragment` 来说,在其被添加到界面的过程中会经历如下几个重要阶段: 1. **创建实例** - 构造函数执行完毕后紧接着就是 `onAttach(Context)` —— 表明此片段已经关联了一个上下文环境; 2. **布局构建** - 接着是 `onCreate(Bundle savedInstanceState)`——用于完成一些轻量级的一次性设置工作; - 随即调用 `onCreateView(LayoutInflater, ViewGroup, Bundle)` 创建视图结构; 3. **准备就绪** - `onViewCreated(View, Bundle)` 此处可以访问刚刚建立好的 UI 组件; - 如果该 `Fragment` 是首次绘制,则还会收到 `onActivityCreated(Bundle)` 回调通知它整个 `Activity` 已经完全准备好; 4. **可见状态调整** - 用户可以看到内容之前会有一次 `onStart()` 调用; - 最终到达稳定运行期前还有最后一次重要的转换动作 `onResume()` ,此时意味着这个 `Fragment` 成为了前台焦点所在[^1]。 ```java // 示例代码展示如何观察 Lifecycle 变化 @Override public void onAttach(@NonNull Context context) { super.onAttach(context); Log.d(TAG, "onAttach"); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate"); } ... ``` 需要注意的是,如果是在同一个 `Activity` 下面的不同 `Fragment` 间相互替换的话,旧有的 `Fragment` 并不会立即结束自己的生命流程而是先进入后台等待恢复的机会。具体表现为先走一遍类似于 “pause-stop”的降序路线直到不可见为止,而新的则沿着相反方向逐步上升直至取代前者成为当前活跃对象[^2]。 此外,由于 Android 系统设计上的特性决定了多个组件间的交互可能存在并发情况,所以实际开发过程中应当特别留意避免因跨层通信不当引发的各种异常状况。比如在一个 `Fragment` 的 `onPause()` 中执行长时间任务可能会阻碍后续操作及时响应,进而影响用户体验流畅度[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值