java监听mysql某张表的insert操作_mysql安装及加固

mysql安装

查看是否安装mysql

我们先看一下有没有安装mysql

yum list installed mysql |  grep mysql

49f1c5aba7a4b70daf6b152858f113cf.png

本地只安装了php链接mysql的库,没有安装mysql

如果有安装,可以使用安装的或者卸载了重新安装

添加yum源

去mysql官网查找yum源

找到最新的https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm

下面我就来安装下yum源

sudo rpm -ivh https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm

d271f6e6c86f4e62ca65ae0db74c6443.png

我们再看一下yum源是否安装成功

yum repolist | grep mysql

139e68424ce51ac46f3494c531b5fa5d.png

可以看到已经有mysql的yum源了

查看mysql的版本

yum repolist all | grep mysql

c0b315ae280785775d48940771692969.png

可以看到很多被禁用了,现在比较稳定的最高稳定版本是8.0了;

我们就安装这个吧

yum安装

sudo yum install mysql-community-server 

b18f0037ca8810d0d36ae4a446f20ac4.png

下载安装完成,

查看下安装目录

whereis mysql

490e3630195cd4053b2f91a885c27f1a.png

启动/关闭mysql

sudo systemctl start mysqld systemctl status mysqld //查看mysql的状态

9ae3070f5855fb7dd97d6c4ed145475a.png

显示是启动了。

查看初始密码(如无内容直接跳过)

sudo grep 'temporary password' /var/log/mysqld.log

9260c75095a40b3280c8372cc442e26a.png

测试下是否真的启动成功

sudo mysql -u root -p

使用上一步得到的初始化密码登录,若没有初始化密码,则直接回车即可

修改root密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';

6768d0e0417a02b6833a8c76c35b47fc.png

刷新MySQL的系统权限相关表

mysql> flush privileges;

退出登录,试下新密码登录,登录成功即完成了。

php链接数据库

php代码如下:

<?php

echo 6666666666;
$con = mysql_connect("localhost","root","密码");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
else{
  echo "login success.";
}
// some code
//mysql_close($con);
phpinfo();

?>

访问http://192.168.189.134/phpinfo.php

提示:Could not connect: Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

caching_sha2_password时mysql8默认的认证方式,好像使安装的mysql没有包含这个插件,以前版本的mysql使用的是mysql_native_password,我们修改为这个模式看看

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';

刷新MySQL的系统权限相关表

mysql> flush privileges;

再访问http://192.168.189.134/phpinfo.php

b49cde7c6abffdde49f2f6642a9a7711.png

链接mysql成功。

mysql基本操作

1)数据库相关SQL的语句 a)显示当前用户下的数据库 show databases; b)创建数据库(语法参考? create database) create database pms; create database if not exists pms; create database if not exists pms character set utf8;

说明:在mysql中一个用户下可以有很多数据库(DB)

c)使用或打开数据库 ​ use database; ​ 查看当前正在使用的数据库:select database(); ​ d)删除数据库(语法? drop database) ​ drop database pms; ​ drop database if exists pms;

2)MySQL中表的相关操作?(DDL) a)创建表(语法? create table) create table if not exists pet( id int primary key auto_increment, name varchar(100) not null ); 当需要查看某张表的创建语句时,可以使用 show create table pet 当需要显示表结构时可以使用: desc pet b)修改表(语法?alter table);不作为重点,自己了解 c)删除表(语法?drop table) drop table if exists pet;

3)MySQL表中数据的操作?(DML) 1)向表中写入数据(insert) insert into pet values (null,'A'); insert into pet(id,name) values (null,'B'); insert into pet(name)values('C'); insert into pet(name)values('D'),('E'); 2)查询表中数据(select) select * from pet; select id,name from pet; select id,name from pet where id=10;

分页查询:limit 语句的应用(语法参考?select) ​ select * from pet limit 2; --2为row_count(表示要取几条数据) ​ select * from pet limit 4,2; --4表示offset,2表示 row_count ​ select * from pet limit 2 offset 4;

mysql加固

禁止 Mysql 以管理员帐号权限运行

以普通帐户安全运行 mysqld,禁止以管理员帐号权限运行 MySQL 服务。在 /etc/my.cnf 配置文件中进行以下设置

user=mysql

口令安全

检查账户默认密码和弱密码。口令长度需要至少八位,并包括数字、小写字母、大写字母和特殊符号四类中的至少两种类型,且五次以内不得设置相同的口令。密码应至少每 90 天进行一次更换。

下面命令修改密码

mysql> update user set password=password('test!p3') where user='root';  mysql> flush privileges;

弱密码很容易被爆破,所以密码复杂的要够,生命周期要限制,定期更换。

关闭远程访问

这种仅限于应用和数据库在同一台主机的情况,如果不同主机,那就不能禁止远程访问了

关闭远程访问可以通过禁止远程 TCP/IP 连接,通过在 MySQL 服务器的启动参数中添加--skip-networking参数使 MySQL 服务不监听任何 TCP/IP 连接,增加安全性。

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要

PHP进阶架构师>>>视频、面试文档免费获取​docs.qq.com
e723adbcdb5718b68dcc567426a6029f.png

或 者关注咱们下面的知乎专栏

PHP大神进阶​zhuanlan.zhihu.com
ff934963988c7fa5777837da0afa620e.png
来源:https://www.cnblogs.com/alummox/p/11370964.html
Spring Boot可以通过使用MySQL的binlog来实现实时监听张表的变化。下面是一个基本的示例代码: 1. 在`application.properties`文件中添加以下配置: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=123456 spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect spring.jpa.show-sql=true spring.jpa.open-in-view=false spring.jpa.properties.hibernate.default_schema=mydatabase spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true spring.jpa.properties.hibernate.event.merge.entity_copy_observer=allow ``` 这里的`mydatabase`是你的数据库名称,`root`和`123456`是你的数据库用户名和密码。 2. 创建一个`DatabaseEventListener`类来监听数据库变化: ```java import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionalEventListener; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @Component public class DatabaseEventListener { @PersistenceContext private EntityManager entityManager; @EventListener @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) public void handleDatabaseEvent(DatabaseEvent event) { // 处理数据库变化事件 System.out.println("变化事件:" + event); } } ``` 这里的`DatabaseEvent`是自定义的事件类,你可以根据自己的需求定义自己的事件类。 3. 创建一个`DatabaseEvent`类来数据库变化事件: ```java public class DatabaseEvent { private String tableName; public DatabaseEvent(String tableName) { this.tableName = tableName; } public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } @Override public String toString() { return "DatabaseEvent{" + "tableName='" + tableName + '\'' + '}'; } } ``` 4. 在需要监听的方法中,手动触发事件: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class ExampleService { @Autowired private ApplicationEventPublisher eventPublisher; @Transactional public void doSomethingAndTriggerEvent() { // 执行一些操作 // ... // 触发事件 eventPublisher.publishEvent(new DatabaseEvent("my_table")); } } ``` 这里的`my_table`是你需要监听名。 以上就是一个基本的示例,你可以根据自己的需求进行修改和扩展。注意,需要确保MySQL的binlog功能已经开启。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值