Linux学习笔记(2月15日)

这篇博客详细介绍了Linux环境下如何重置MariaDB的root和普通用户密码,包括修改配置文件、重启服务等步骤。此外,还讲解了MariaDB慢查询日志的重要性及配置方法,通过模拟慢查询来定位性能瓶颈。同时,文章涵盖了Tomcat的JDK部署、zrlog的安装以及Nginx作为反向代理配置以解决端口冲突和提升性能。
摘要由CSDN通过智能技术生成

4.56 MariaDB密码重置

  1. 记得root密码:
    mysqladmin -uroot -p原密码 password "新密码"
  2. 没有root密码:
      1)编辑my.cnf,增加skip-grant,然后重启 mysql服务;
      2)执行mysql -uroot登录进MariaDB,执行use mysql切换到mysql库,执行desc user查看user表的所有字段(MySQL5.7之前的版本将用户密码储存在password字段里,从5.7版本开始将用户密码储存在authentication_string字段里),执行update user set password=password("新密码") where user='root';update user set authentication_string=password("新密码") where user='root';修改root用户的密码;
      3)退出MariaDB,删除my.cnf里面的 skip-grant , 重启服务;
  3. 修改普通用户的密码:
    修改普通用户的密码与root用户的密码类似,在执行修改密码的命令时where user=指定用户名,之后还需要加入and host='localhost',例如:
    update user set password=password("111111") where user='blog' and host='127.0.0.1';
    另外,修改了数据库相关用户的密码后,网页可能会无法访问,此时需要找到网站服务的配置文件进行修改,比如wordpress的wp-config.php和discuz的config_global.php。

4.57 MariaDB慢查询日志

  为什么要学会配置和查看MariaDB的慢查询日志——它能帮助我们分析MariaDB的瓶颈点。

  1. 进入MariaDB,查看当前配置:
[root@rice01 ~]# mysql -uroot -p111111
MariaDB [(none)]> show variables like 'slow%';
+---------------------+-----------------+
| Variable_name       | Value           |
+---------------------+-----------------+
| slow_launch_time    | 2               |
| slow_query_log      | OFF             | // 当前慢查询日志为关闭状态
| slow_query_log_file | rice01-slow.log | // 慢查询日志的名称为rice01-slow.log
+---------------------+-----------------+
MariaDB [(none)]> show variables like 'datadir%';
+---------------+--------------+
| Variable_name | Value        |
+---------------+--------------+
| datadir       | /data/mysql/ | // 日志存放的路径在/data/mysql下
+---------------+--------------+
MariaDB [(none)]> show variables like 'long%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 | // 慢查询日志记录的查询时间点,当前为查询时间超过10s记录日志
+-----------------+-----------+
  1. 配置慢查询日志:
[root@rice01 ~]# vi /etc/my.cnf
// 增加以下配置:
slow_query_log = ON // 开启慢查询日志
slow_query_log_file = /data/mysql/rice01-slow.log // 定义慢查询日志的路径及文件名
long_query_time = 2 // 定义慢查询日志记录的查询时间点,当查询时间超过2s时记录日志
[root@rice01 ~]# /etc/init.d/mysqld restart // 重启mysql
  1. 模拟慢查询:
[root@rice01 ~]# mysql -uroot -p111111
MariaDB [(none)]> select sleep(5); // 在MySQL/MariaDB中执行select sleep(N)可以让此语句运行N秒钟
+----------+
| sleep(5) |
+----------+
|        0 |
+----------+
[root@rice01 ~]# cat /data/mysql/rice01-slow.log 
/usr/local/mysql/bin/mysqld, Version: 5.5.63-MariaDB (MariaDB Server). started with:
Tcp port: 0  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
# Time: 190223 12:05:32
# User@Host: root[root] @ localhost []
# Thread_id: 3  Schema:   QC_hit: No
# Query_time: 5.019433  Lock_time: 0.000000  Rows_sent: 1  Rows_examined: 0
SET timestamp=1550894732;
select sleep(5);

  关于sleep (N)函数的相关知识:
  通过在MySQL/MariaDB中执行select sleep(N)可以让此语句运行N秒钟:

    mysql> select sleep(1);
    +----------+
    | sleep(1) |
    +----------+
    |        0 |
    +----------+
    1 row in set (1.00 sec)

  返回给客户端的执行时间显示出等待了1秒钟。
  借助于sleep(N)这个函数我们可以在MySQL/MariaDB的PROCESSLIST中捕获到执行迅速不易被查看到的语句以确定我们的程序是否确实在Server端发起了该语句。比如我们在调试时想确定一下程序是否确确实实向Server发起了执行SQL语句的请求,那么我们可以通过执行show processlist或者由information_schema.processlist表来查看语句是否出现。但往往语句执行速度可能非常快,这样的话就很难通过上述办法确定语句是否真正被执行了。例如下面语句的执行时间为0.00秒,线程信息一闪而过,根本无从察觉。

    mysql> select name from animals where name='tiger';
    +-------+
    | name  |
    +-------+
    | tiger |
    +-------+
    1 row in set (0.00 sec)

  在这种情况下,可以通过在语句中添加一个sleep(N)函数,强制让语句停留N秒钟,来查看后台线程,例如:

    mysql> select sleep(1),name from animals where name='tiger';
    +----------+-------+
    | sleep(1) | name  |
    +----------+-------+
    |        0 | tiger |
    +----------+-------+
    1 row in set (1.00 sec)

  同样的条件该语句返回的执行时间为1.0秒。
  但是使用这个办法是有前提条件的,也只指定条件的记录存在时才会停止指定的秒数,例如查询条件为name=‘pig’,结果表明记录不存在,执行时间为0

    mysql> select name from animals where name='pig';
    Empty set (0.00 sec)

  在这样一种条件下,即使添加了sleep(N)这个函数,语句的执行还是会一闪而过,例如:

    mysql> select sleep(1),name from animals where name='pig';
    Empty set (0.00 sec)

  另外需要注意的是,添加sleep(N)这个函数后,语句的执行具体会停留多长时间取决于满足条件的记录数,MySQL会对每条满足条件的记录停留N秒钟。
  例如,name like '%ger’的记录有三条

    mysql> select name from animals where name like '%ger';
    +-------+
    | name  |
    +-------+
    | ger   |
    | iger  |
    | tiger |
    +-------+
    3 rows in set (0.00 sec)

  那么针对该语句添加了sleep(1)这个函数后语句总的执行时间为3.01秒,可得出,MySQL对每条满足条件的记录停留了1秒中。

    mysql> select sleep(1),name from animals where name like '%ger';
    +----------+-------+
    | sleep(1) | name  |
    +----------+-------+
    |        0 | ger   |
    |        0 | iger  |
    |        0 | tiger |
    +----------+-------+
    3 rows in set (3.01 sec)

4.58 Tomcat_JDK部署

  1. 安装JDK、Tomcat:
[root@rice01 ~]# yum install -y java-1.8.0-openjdk
[root@rice01 ~]# cd /usr/local/src/
[root@rice01 src]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.16/bin/apache-tomcat-9.0.16.tar.gz
[root@rice01 src]# tar zxf apache-tomcat-9.0.16.tar.gz
[root@rice01 src]# rm -f apache-tomcat-9.0.16.tar.gz
[root@rice01 src]# mv apache-tomcat-9.0.16 /usr/local/tomcat
[root@rice01 local]# /usr/local/tomcat/bin/startup.sh // 启动tomcat
[root@rice01 local]# ps aux |grep java // 查看进程,也可以grep tomcat
[root@rice01 local]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      7003/php-fpm: maste 
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      7210/mysqld         
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6917/nginx: master  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6895/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      7295/master         
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      6917/nginx: master  
tcp6       0      0 :::8009                 :::*                    LISTEN      7616/java // 8009为AJP端口
tcp6       0      0 :::8080                 :::*                    LISTEN      7616/java // 8080为web端口
tcp6       0      0 :::22                   :::*                    LISTEN      6895/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      7295/master         
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      7616/java // 8005为管理端口
[root@rice01 webapps]# firewall-cmd --add-port=8080/tcp --permanent
[root@rice01 webapps]# firewall-cmd --add-port=8005/tcp --permanent
[root@rice01 webapps]# firewall-cmd --reload

  tomcat ajp端口的作用:
  tomcat最主要的功能是提供Servlet/JSP容器,尽管它也可以作为独立的Java Web服务器,它在对静态资源(如HTML文件或图像文件)的处理速度,以及提供的Web服务器管理功能方面都不如其他专业的HTTP服务器,如IIS和Apache服务器。
  因此在实际应用中,常常把Tomcat与其他HTTP服务器集成。对于不支持Servlet/JSP的HTTP服务器,可以通过Tomcat服务器来运行Servlet/JSP组件。
  当Tomcat与其他HTTP服务器集成时,Tomcat服务器的工作模式通常为进程外的Servlet容器,Tomcat服务器与其他HTTP服务器之间通过专门的插件来通信。
  2. 配置Tomcat开机自启:

[root@rice01 ~]# cd /usr/local/tomcat/bin
[root@rice01 bin]# vi startup.sh // 编辑tomcat的启动脚本
#!/bin/sh
#chkconfig:2345 20 80
// 设置tomcat服务启动的系统运行级别,20为启动优先级,80为关闭优先级,因为network的启动优先级
为10,关闭优先级为90,所以此处设置20和80最合适
#description:tomcat auto start // 定义对该服务的描述
#processname:tomcat // 定义流程名称
......
[root@rice01 bin]# vi catalina.sh // 编辑tomcat的服务脚本
// 在一般模式下输入‘.’进入命令模式,输入‘/export’进行定位,定义tomcat服务的环境变量
......
export QIBM_MULTI_THREADED=Y
export CATALINA_BASE=/usr/local/tomcat
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_TMPDIR=/usr/local/tomcat/temp
......
[root@rice01 bin]# ln -s /usr/local/tomcat/bin/startup.sh /etc/rc.d/init.d/tomcat
// 生成startup.sh启动脚本的软连接文件,命名为tomcat
[root@rice01 bin]# ls -l /etc/rc.d/init.d/
// 查看tomcat是否有可执行权限,如果没有的话执行‘chmod +x /etc/rc.d/init.d/tomcat'添加可执行权限
[root@rice01 bin]# chkconfig --add tomcat // 将tomcat加入系统服务

4.59 安装zrlog

  1. Linux安装zrlog:
[root@rice01 ~]# cd /usr/local/src/
[root@rice01 src]# wget 'http://dl.zrlog.com/release/zrlog-2.1.0-3617b2e-release.war?attname=ROOT.war&ref=index'
[root@rice01 src]# mv zrlog-2.1.0-3617b2e-release.war\?attname\=ROOT.war\&ref\=index /usr/local/tomcat/webapps/zrlog-2.1.0.war
[root@rice01 src]# cd /usr/local/tomcat/webapps/
[root@rice01 webapps]# mv ROOT ROOT.bak
[root@rice01 webapps]# mv zrlog-2.1.0 ROOT
// 客户端访问IP:8080时,访问的其实是webapps文件夹下的内容,而页面的内容又放置在ROOT文件夹下,所以我们需要将zrlog改名为ROOT,让客户端访问IP:8080时直接访问zrlog的内容
[root@rice01 webapps]# rm -f zrlog-2.1.0.war
  1. 创建数据库:
[root@rice01 webapps]# mysql -uroot -111111 -e "create database zrlog"
[root@rice01 webapps]# mysql -uroot -111111 -e "grant all on zrlog.* to 'zrlog'@'127.0.0.1' identified by '111111'"
  1. 浏览器安装zrlog:
    打开浏览器,访问192.168.142.131:8080,填好相应信息后安装完成。

4.60 Nginx代理Tomcat

  为什么要为Tomcat配置反向代理:
  1)如果一台机器既有Nginx又有Tomcat,同时去监听同一端口则会产生端口冲突。
  2)Tomcat的web服务端口为8080,不方便客户端进行访问,通过反向代理可以让客户端在访问80端口时等于访问了8080端口;
  3)Tomcat最主要的功能是提供Servlet/JSP容器,尽管它也可以作为独立的Java Web服务器,但它在对静态资源(如HTML文件或图像文件)的处理速度,以及提供的Web服务器管理功能方面都不如其他专业的HTTP服务器,也不擅长处理高并发的静态请求。
  新建一个Nginx虚拟主机,配置如下:

server {
		server_name zrlog.riceyoung.com;
		
		location /
		{
			proxy_pass http://127.0.0.1:8080;
			proxy_set_header Host $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值