docker安装Mysql5.7以及远程登陆链接配置

1.安装mysql5.7 docker镜像

docker安装:docker安装一条龙

1、拉取官方mysql5.7镜像

docker pull mysql:5.7
root@VM-12-5-ubuntu:/# docker pull mysql:5.7
5.7: Pulling from library/mysql
ffbb094f4f9e: Pull complete
df186527fc46: Pull complete
fa362a6aa7bd: Pull complete
5af7cb1a200e: Pull complete
949da226cc6d: Pull complete
bce007079ee9: Pull complete
eab9f076e5a3: Pull complete
c7b24c3f27af: Pull complete
6fc26ff6705a: Pull complete
bec5cdb5e7f7: Pull complete
6c1cb25f7525: Pull complete
Digest: sha256:d1cc87a3bd5dc07defc837bc9084f748a130606ff41923f46dec1986e0dc828d
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
root@VM-12-5-ubuntu:/#

3、查看镜像库

docker images
root@VM-12-5-ubuntu:/# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
mysql        5.7       738e7101490b   8 days ago   448MB
root@VM-12-5-ubuntu:/#

2.创建mysql容器

1、在本地创建mysql的映射目录

mkdir -p /root/mysql/data /root/mysql/logs /root/mysql/conf

2、在/root/mysql/conf中创建 *.cnf 文件(叫什么都行)

touch my.cnf

3、创建容器,将数据,日志,配置文件映射到本机

docker run -p 3306:3306 --name mysql -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

-d: 后台运行容器

-p 将容器的端口映射到本机的端口

-v 将主机目录挂载到容器的目录

-e 设置参数

4、启动mysql容器(一般是停止过后)

docker start mysql

5、查看/root/mysql/data目录是否有数据文件

root@VM-12-5-ubuntu:~/mysql/conf# ls /root/mysql/data/
auto.cnf    ca.pem           client-key.pem  ibdata1      ib_logfile1  mysql               private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       performance_schema  public_key.pem   server-key.pem
root@VM-12-5-ubuntu:~/mysql/conf#

6、服务器注意要开放端口3306
7、mysql允许远程连接(不开启可能会存在连不上的问题)

docker exec -it mysql /bin/bash 或者 docker exec -it 容器ID /bin/bash ## 进入容器

mysql -uroot -p ## 登录myusql,会提示输入密码,输入之前容器初始化的密码即可

## 登录数据库      **修改使用admin登录配置**
mysql> grant all on *.* to admin@'%' identified by 'xxxxxx' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
## 登录数据库        **修改使用root登录配置:root用户记得是 'root'**
mysql> grant all on *.* to 'root'@'%' identified by 'root' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 

 

修改Docker容器的时间和宿主时间一致

在Docker容器创建好之后,可能会发现容器时间跟宿主机时间不一致

发现两者之间的时间相差了八个小时
宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)
容器采用了UTC时区,UTC应该是指(Coordinated Universal Time,标准时间)

我们需要同步它们的时间,让容器时间跟宿主机时间保持一致。有以下几种方法:

 

方法1:

在创建 Docker 容器时,加上 “-v /etc/localtime:/etc/localtime:ro” 参数,让容器使用宿主机的时间,容器时间与宿主机时间同步。

比如创建一个 Tomcat 容器:

docker run -d -p 8080:8080 –name mytomcat -v /etc/localtime:/etc/localtime:ro tomcat

其中 “-v /etc/localtime:/etc/localtime:ro” 表示让容器使用宿主机的时间时区。

 

方法2:

如果容器已经启动,则进入容器进行修改

#进入容器
docker exec -it <容器ID或者容器NAME> /bin/bash

cd /etc
#备份一下localtime
mv localtime localtime_bak
#替换之前的localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
注意:有可能容器里没有Shanghai这个文件,可以用以下命令,把宿主机的Shanghai文件复制到容器中

docker cp /usr/share/zoneinfo/Asia/Shanghai 容器名称:/usr/share/zoneinfo/Asia
有了Shanghai这个文件后,再执行:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

方法3:

把宿主机的localtime文件复制到容器中

docker cp /etc/localtime 容器名:/etc

robots.txt屏蔽海外无用蜘蛛,防止大量蜘蛛抓取导致网站崩溃

屏蔽海外无用蜘蛛,防止大量蜘蛛抓取导致网站崩溃
robots协议
也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的蜘蛛,此网站中的哪些内容是不应被搜索引擎的蜘蛛获取的,哪些是可以被蜘蛛获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的蜘蛛访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。
robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。

下面以WP博客做例子:

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-include/
Disallow: /wp-login.php?redirect_to=*
Disallow: /go?_=*
Allow: /wp-admin/admin-ajax.php
User-agent: MJ12bot
Disallow: /
User-agent: YisouSpider
Disallow: /
User-agent: SemrushBot
Disallow: /
User-agent: SemrushBot-SA
Disallow: /
User-agent: SemrushBot-BA
Disallow: /
User-agent: SemrushBot-SI
Disallow: /
User-agent: SemrushBot-SWA
Disallow: /
User-agent: SemrushBot-CT
Disallow: /
User-agent: SemrushBot-BM
Disallow: /
User-agent: SemrushBot-SEOAB
Disallow: /
user-agent: AhrefsBot
Disallow: /
User-agent: DotBot
Disallow: /
User-agent: Uptimebot
Disallow: /
User-agent: MegaIndex.ru
Disallow: /
User-agent: ZoominfoBot
Disallow: /
User-agent: Mail.Ru
Disallow: /
User-agent: BLEXBot
Disallow: /
User-agent: ExtLinksBot
Disallow: /
User-agent: aiHitBot
Disallow: /
User-agent: Researchscan
Disallow: /
User-agent: DnyzBot
Disallow: /
User-agent: spbot
Disallow: /
User-agent: YandexBot
Disallow: /
User-agent: SemrushBot
Disallow: /
User-agent: SemrushBot-SA
Disallow: /
User-agent: SemrushBot-BA
Disallow: /
User-agent: SemrushBot-SI
Disallow: /
User-agent: SemrushBot-SWA
Disallow: /
User-agent: SemrushBot-CT
Disallow: /
User-agent: SemrushBot-BM
Disallow: /
User-agent: SemrushBot-SEOAB
Disallow: /

Allure的基本用法

基本用法

Allure监听器在测试执行期间会收集结果,只需添加alluredir选项,并选择输出的文件路径即可。

pytest --alluredir=./allure-results

# 执行此命令,将在默认浏览器中显示生成的报告
allure serve ./allure-results

五.Allure注解说明:

MySQL报错:sql_mode=only_full_group_by 4种解决方法含举例

首先,打开数据库,输入

select @@global.sql_mode;

这个时候,就会返回得到以下的信息:(不同电脑返回的信息可能不同)

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

如果里面包含 ONLY_FULL_GROUP_BY,那么就重新设置,在数据库中输入以下代码,去掉ONLY_FULL_GROUP_BY即可:

SET GLOBALsql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

 

MySQL根据某一个或者多个字段查找重复数据的sql语句

MySql 删除多个字段重复的数据(只保留一条)

 DELETE FROM 表名 WHERE (字段1,字段2,字段3)
IN 
(SELECT 字段1,字段2,字段3 FROM (SELECT 字段1,字段2,字段3 FROM 表名 GROUP BY 字段1,字段2,字段3 HAVING COUNT(*)>1) s1) 
AND
id NOT IN (SELECT id FROM (SELECT id FROM 表名 GROUP BY 字段1,字段2,字段3 HAVING COUNT(*)>1) s2);

sql 查出一张表中重复的所有记录数据

1.表中有id和name 两个字段,查询出name重复的所有数据

select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1)

 

2、查询出所有数据进行分组之后,和重复数据的重复次数的查询数据,先列下:

1
select count(username) as '重复次数',username from xi group by username having count(*)>1 order by username desc

3、一下为 查看别人的 结果,现列下:查询及删除重复记录的方法大全

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

1
2
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

1
2
3
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段)

1
2
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

1
2
3
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

1
2
3
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

(二)

比方说

在A表中存在一个字段“name”,

而且不同记录之间的“name”值有可能会相同,

现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;

1
Select Name,Count(*) From A Group By Name Having Count(*) > 1

如果还查性别也相同大则如下:

1
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

(三)

方法一

1
2
3
4
5
6
7
8
9
10
11
declare @max integer,@id integer
declare cur_rows cursor local for
select 主字段,count(*) from 表名 group by 主字段 having count(*) >;
open cur_rows fetch cur_rows into @id,@maxwhile @@fetch_status=0
begin
 select @max = @max -1
 set rowcount @max
 delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@maxend
close cur_rows
set rowcount 0

方法二"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用

1
select distinct * from tableName

就可以得到无重复记录的结果集。

如果该表需要删除重复的记录(重复记录保留1条),

可以按以下方法删除

1
2
3
4
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下  假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

1
2
3
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2) 

最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

(四)查询重复

1
select * from tablename where id in (select id from tablenamegroup by idhaving count(id) > 1)

对一个字段查找重复记录

根据sample_code字段找到重复记录

1
SELECT * FROM tb_table WHERE sample_code IN( SELECT sample_code FROM tb_table GROUP BY sample_code HAVING COUNT(sample_code) > 1 );

对多个字段查找重复记录(这里以2个为例)

根据name和code字段找到重复记录

1
2
3
4
SELECT * from (SELECT *, CONCAT(name,code) as nameAndCode from tb_table) t WHERE t.nameAndCode in
(
 SELECT nameAndCode from (SELECT CONCAT(name,code) as nameAndCode from tb_table) tt GROUP BY nameAndCode HAVING count(nameAndCode) > 1
)

总结

以上所述是小编给大家介绍的MySQL根据某一个或者多个字段查找重复数据的sql语句,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!