CPU/GPU

CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。

  于是CPU和GPU就呈现出非常不同的架构(示意图):

点击查看原图

  图片来自nVidia CUDA文档。其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。

GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache。而CPU不仅被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是CPU很小的一部分

点击查看原图

  从上图可以看出:

Cache, local memory: CPU > GPU

Threads(线程数): GPU > CPU

Registers: GPU > CPU  多寄存器可以支持非常多的Thread,thread需要用到register,thread数目大,register也必须得跟着很大才行。

SIMD Unit(单指令多数据流,以同步方式,在同一时间内执行同一条指令): GPU > CPU。

 

CPU 基于低延时的设计:

点击查看原图

CPU有强大的ALU(算术运算单元),它可以在很少的时钟周期内完成算术计算。

当今的CPU可以达到64bit 双精度。执行双精度浮点源算的加法和乘法只需要1~3个时钟周期。

CPU的时钟周期的频率是非常高的,达到1.532~3gigahertz(千兆HZ, 10的9次方).

 

大的缓存也可以降低延时。保存很多的数据放在缓存里面,当需要访问的这些数据,只要在之前访问过的,如今直接在缓存里面取即可。

 

复杂的逻辑控制单元。当程序含有多个分支的时候,它通过提供分支预测的能力来降低延时。

数据转发。 当一些指令依赖前面的指令结果时,数据转发的逻辑控制单元决定这些指令在pipeline中的位置并且尽可能快的转发一个指令的结果给后续的指令。这些动作需要很多的对比电路单元和转发电路单元。

点击查看原图

GPU是基于大的吞吐量设计。

GPU的特点是有很多的ALU和很少的cache. 缓存的目的不是保存后面需要访问的数据的,这点和CPU不同,而是为thread提高服务的。如果有很多线程需要访问同一个相同的数据,缓存会合并这些访问,然后再去访问dram(因为需要访问的数据保存在dram中而不是cache里面),获取数据后cache会转发这个数据给对应的线程,这个时候是数据转发的角色。但是由于需要访问dram,自然会带来延时的问题。

GPU的控制单元(左边黄色区域块)可以把多个的访问合并成少的访问。

GPU的虽然有dram延时,却有非常多的ALU和非常多的thread. 为啦平衡内存延时的问题,我们可以中充分利用多的ALU的特性达到一个非常大的吞吐量的效果。尽可能多的分配多的Threads.通常来看GPU ALU会有非常重的pipeline就是因为这样。

 

所以与CPU擅长逻辑控制,串行的运算。和通用类型数据运算不同,GPU擅长的是大规模并发计算,这也正是密码破解等所需要的。所以GPU除了图像处理,也越来越多的参与到计算当中来。

GPU的工作大部分就是这样,计算量大,但没什么技术含量,而且要重复很多很多次。就像你有个工作需要算几亿次一百以内加减乘除一样,最好的办法就是雇上几十个小学生一起算,一人算一部分,反正这些计算也没什么技术含量,纯粹体力活而已。而CPU就像老教授,积分微分都会算,就是工资高,一个老教授资顶二十个小学生,你要是富士康你雇哪个?GPU就是这样,用很多简单的计算单元去完成大量的计算任务,纯粹的人海战术。这种策略基于一个前提,就是小学生A和小学生B的工作没有什么依赖性,是互相独立的。很多涉及到大量计算的问题基本都有这种特性,比如你说的破解密码,挖矿和很多图形学的计算。这些计算可以分解为多个相同的简单小任务,每个任务就可以分给一个小学生去做。但还有一些任务涉及到“流”的问题。比如你去相亲,双方看着顺眼才能继续发展。总不能你这边还没见面呢,那边找人把证都给领了。这种比较复杂的问题都是CPU来做的。

  总而言之,CPU和GPU因为最初用来处理的任务就不同,所以设计上有不小的区别。而某些任务和GPU最初用来解决的问题比较相似,所以用GPU来算了。GPU的运算速度取决于雇了多少小学生,CPU的运算速度取决于请了多么厉害的教授。教授处理复杂任务的能力是碾压小学生的,但是对于没那么复杂的任务,还是顶不住人多。当然现在的GPU也能做一些稍微复杂的工作了,相当于升级成初中生高中生的水平。但还需要CPU来把数据喂到嘴边才能开始干活,究竟还是靠CPU来管的。

 

什么类型的程序适合在GPU上运行?

  (1)计算密集型的程序。所谓计算密集型(Compute-intensive)的程序,就是其大部分运行时间花在了寄存器运算上,寄存器的速度和处理器的速度相当,从寄存器读写数据几乎没有延时。可以做一下对比,读内存的延迟大概是几百个时钟周期;读硬盘的速度就不说了,即便是SSD, 也实在是太慢了。

  (2)易于并行的程序。GPU其实是一种SIMD(Single Instruction Multiple Data)架构, 他有成百上千个核,每一个核在同一时间最好能做同样的事情。

摘自:

http://www.cnblogs.com/biglucky/p/4223565.html

发表在 technologys | 标签为 , | CPU/GPU已关闭评论

mysqldump

mysqldump 用来转储数据库或搜集数据库进行备份或将数据转存为文件
如在服务器上进行备份并且表均为MyISAM表,应考虑使用mysqlhotcopy,因为可以更快地进行备份和恢复。

1.mysqldump的几种常用方法:

(1)导出整个数据库(包括数据库中的数据)

mysqldump -u username -p dbname > dbname.sql

(2)导出数据库结构(不含数据)

mysqldump -u username -p -d dbname > dbname.sql

(3)导出数据库中的某张数据表(包含数据)

mysqldump -u username -p dbname tablename > tablename.sql

(4)导出数据库中的某张数据表的表结构(不含数据)

mysqldump -u username -p -d dbname tablename > tablename.sql

(5)转储几个数据库
mysqldump ---database db_name1 [db_name2 ...] > my_databases.sql

(6)转储全库
mysqldump --all-databases > all_databases.sql

(7)Master/Slave 数据转移
mysqldump -uroot -ppassword --opt --default-character-set=utf8 --extended-insert=true --single-transaction -R --flush-logs --master-data=1 --all-databases > 20170809.sql

注:查询file和position的值 grep -i "change master to" 20170809.sql
windows find "CHANGE MASTER TO " d:\\20170809.sql

2. 还原数据到库

mysql> source /home/dba/dbname.sql
shell> mysql db_name < backup-file.sql
shell> mysqldump --opt db_name > backup-file.sql

库内具有函数时考虑:
SET GLOBAL log_bin_trust_function_creators = 1;
source /home/dba/dbname.sql
SET GLOBAL log_bin_trust_function_creators = 0;

3. mysqldump支持的选项
如果运行mysqldump没有--quick或--opt选项,mysqldump在转储结果前将整个结果集装入内存。如果转储大数据库可能会出现问题。该选项默认启用,但可以用--skip-opt禁用。

如果使用最新版本的mysqldump程序生成一个转储重装到很旧版本的MySQL服务器中,不应使用--opt或-e选项。

mysqldump支持下面的选项:

· ---help,-?

显示帮助消息并退出。

· --add-drop--database

在每个CREATE DATABASE语句前添加DROP DATABASE语句。

· --add-drop-tables

在每个CREATE TABLE语句前添加DROP TABLE语句。

· --add-locking

用LOCK TABLES和UNLOCK TABLES语句引用每个表转储。重载转储文件时插入得更快。

· --all--database,-A

转储所有数据库中的所有表。与使用---database选项相同,在命令行中命名所有数据库。

· --allow-keywords

允许创建关键字列名。应在每个列名前面加上表名前缀。

· ---comments[={0|1}]

如果设置为 0,禁止转储文件中的其它信息,例如程序版本、服务器版本和主机。--skip—comments与---comments=0的结果相同。 默认值为1,即包括额外信息。

· --compact

产生少量输出。该选项禁用注释并启用--skip-add-drop-tables、--no-set-names、--skip-disable-keys和--skip-add-locking选项。

· --compatible=name

产生与其它数据库系统或旧的MySQL服务器更兼容的输出。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options或者no_field_options。要使用几个值,用逗号将它们隔开。这些值与设置服务器SQL模式的相应选项有相同的含义。

该选项不能保证同其它服务器之间的兼容性。它只启用那些目前能够使转储输出更兼容的SQL模式值。例如,--compatible=oracle 不映射Oracle类型或使用Oracle注释语法的数据类型。

· --complete-insert,-c

使用包括列名的完整的INSERT语句。

· --compress,-C

压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)。

· --create-option

在CREATE TABLE语句中包括所有MySQL表选项。

· ---database,-B

转储几个数据库。通常情况,mysqldump将命令行中的第1个名字参量看作数据库名,后面的名看作表名。使用该选项,它将所有名字参量看作数据库名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name语句包含在每个新数据库前的输出中。

· ---debug[=debug_options],-# [debug_options]

写调试日志。debug_options字符串通常为'd:t:o,file_name'。

· --default-character-set=charset

使用charsetas默认字符集。如果没有指定,mysqldump使用utf8。

· --delayed-insert

使用INSERT DELAYED语句插入行。

· --delete-master-logs

在主复制服务器上,完成转储操作后删除二进制日志。该选项自动启用--master-data。

· --disable-keys,-K

对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地装载转储文件,因为在插入所有行后创建索引。该选项只适合MyISAM表。

· --extended-insert,-e

使用包括几个VALUES列表的多行INSERT语法。这样使转储文件更小,重载文件时可以加速插入。

· --fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by=...,--行-terminated-by=...

这些选项结合-T选项使用,与LOAD DATA INFILE的相应子句有相同的含义。

· --first-slave,-x

不赞成使用,现在重新命名为--lock-all-tables。

· --flush-logs,-F

开始转储前刷新MySQL服务器日志文件。该选项要求RELOAD权限。请注意如果结合--all--database(或-A)选项使用该选项,根据每个转储的数据库刷新日志。例外情况是当使用--lock-all-tables或--master-data的时候:在这种情况下,日志只刷新一次,在所有 表被锁定后刷新。如果你想要同时转储和刷新日志,应使用--flush-logs连同--lock-all-tables或--master-data。

· --force,-f

在表转储过程中,即使出现SQL错误也继续。

· --host=host_name,-h host_name

从给定主机的MySQL服务器转储数据。默认主机是localhost。

· --hex-blob

使用十六进制符号转储二进制字符串列(例如,'abc' 变为0x616263)。影响到的列有BINARY、VARBINARY、BLOB。

· --lock-all-tables,-x

所有数据库中的所有表加锁。在整体转储过程中通过全局读锁定来实现。该选项自动关闭--single-transaction和--lock-tables。

· --lock-tables,-l

开始转储前锁定所有表。用READ LOCAL锁定表以允许并行插入MyISAM表。对于事务表例如InnoDB和BDB,--single-transaction是一个更好的选项,因为它不根本需要锁定表。

请注意当转储多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证转储文件中的表在数据库之间的逻辑一致性。不同数据库表的转储状态可以完全不同。

· --master-data[=value]

该选项将二进制日志的位置和文件名写入到输出中。该选项要求有RELOAD权限,并且必须启用二进制日志。如果该选项值等于1,位置和文件名被写入CHANGE MASTER语句形式的转储输出,如果你使用该SQL转储主服务器以设置从服务器,从服务器从主服务器二进制日志的正确位置开始。如果选项值等于2,CHANGE MASTER语句被写成SQL注释。如果value被省略,这是默认动作。

--master-data选项启用--lock-all-tables,除非还指定--single-transaction(在这种情况下,只在刚开始转储时短时间获得全局读锁定。又见--single-transaction。在任何一种情况下,日志相关动作发生在转储时。该选项自动关闭--lock-tables。

· --no-create-db,-n

该选项禁用CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name语句,如果给出---database或--all--database选项,则包含到输出中。

· --no-create-info,-t

不写重新创建每个转储表的CREATE TABLE语句。

· --no-data,-d

不写表的任何行信息。如果你只想转储表的结构这很有用。

· --opt

该选项是速记;等同于指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以给出很快的转储操作并产生一个可以很快装入MySQL服务器的转储文件。该选项默认开启,但可以用--skip-opt禁用。要想只禁用确信用-opt启用的选项,使用--skip形式;例如,--skip-add-drop-tables或--skip-quick。

· --password[=password],-p[password]

连接服务器时使用的密码。如果你使用短选项形式(-p),不能在选项和密码之间有一个空格。如果在命令行中,忽略了--password或-p选项后面的 密码值,将提示你输入一个。

· --port=port_num,-P port_num

用于连接的TCP/IP端口号。

· --protocol={TCP | SOCKET | PIPE | MEMORY}

使用的连接协议。

· --quick,-q

该选项用于转储大的表。它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中。

· --quote-names,-Q

用‘`’字符引用数据库、表和列名。如果服务器SQL模式包括ANSI_QUOTES选项,用‘"’字符引用名。默认启用该选项。可以用--skip-quote-names禁用,但该选项应跟在其它选项后面,例如可以启用--quote-names的--compatible。

· --result-file=file,-r file

将输出转向给定的文件。该选项应用在Windows中,因为它禁止将新行‘\n’字符转换为‘\r\n’回车、返回/新行序列。

· --routines,-R

在转储的数据库中转储存储程序(函数和程序)。使用---routines产生的输出包含CREATE PROCEDURE和CREATE FUNCTION语句以重新创建子程序。但是,这些语句不包括属性,例如子程序定义者或创建和修改时间戳。这说明当重载子程序时,对它们进行创建时定义者应设置为重载用户,时间戳等于重载时间。

如果你需要创建的子程序使用原来的定义者和时间戳属性,不使用--routines。相反,使用一个具有mysql数据库相应权限的MySQL账户直接转储和重载mysql.proc表的内容。

该选项在MySQL 5.1.2中添加进来。在此之前,存储程序不转储。

· --set-charset

将SET NAMES default_character_set加到输出中。该选项默认启用。要想禁用SET NAMES语句,使用--skip-set-charset。

· --single-transaction

该选项从服务器转储数据之前发出一个BEGIN SQL语句。它只适用于事务表,例如InnoDB和BDB,因为然后它将在发出BEGIN而没有阻塞任何应用程序时转储一致的数据库状态。

当使用该选项时,应记住只有InnoDB表能以一致的状态被转储。例如,使用该选项时任何转储的MyISAM或HEAP表仍然可以更改状态。

--single-transaction选项和--lock-tables选项是互斥的,因为LOCK TABLES会使任何挂起的事务隐含提交。

要想转储大的表,应结合--quick使用该选项。

· --socket=path,-S path

当连接localhost(为默认主机)时使用的套接字文件。

· --skip--comments

参见---comments选项的描述。

· --tab=path,-T path

产生tab分割的数据文件。对于每个转储的表,mysqldump创建一个包含创建表的CREATE TABLE语句的tbl_name.sql文件,和一个包含其数据的tbl_name.txt文件。选项值为写入文件的目录。

默认情况,.txt数据文件的格式是在列值和每行后面的新行之间使用tab字符。可以使用--fields-xxx和--行--xxx选项明显指定格式。

注释:该选项只适用于mysqldump与mysqld服务器在同一台机器上运行时。你必须具有FILE权限,并且服务器必须有在你指定的目录中有写文件的许可。

· --tables

覆盖---database或-B选项。选项后面的所有参量被看作表名。

· --triggers

为每个转储的表转储触发器。该选项默认启用;用--skip-triggers禁用它。

· --tz-utc

在转储文件中加入SET TIME_ZONE='+00:00'以便TIMESTAMP列可以在具有不同时区的服务器之间转储和重载。(不使用该选项,TIMESTAMP列在具有本地时区的源服务器和目的服务器之间转储和重载)。--tz-utc也可以保护由于夏令时带来的更改。--tz-utc默认启用。要想禁用它,使用--skip-tz-utc。该选项在MySQL 5.1.2中加入。

· --user=user_name,-u user_name

连接服务器时使用的MySQL用户名。

· --verbose,-v

冗长模式。打印出程序操作的详细信息。

· --version,-V

显示版本信息并退出。

· --where='where-condition', -w 'where-condition'

只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。

例如:

"--where=user='jimf'" "-wuserid>1" "-wuserid<1" · --xml,-X

将转储输出写成XML。

还可以使用--var_name=value选项设置下面的变量:

· max_allowed_packet

客户端/服务器之间通信的缓存区的最大大小。最大为1GB。

· net_buffer_length

客户端/服务器之间通信的缓存区的初始大小。当创建多行插入语句时(如同使用选项--extended-insert或--opt),mysqldump创建长度达net_buffer_length的行。如果增加该变量,还应确保在MySQL服务器中的net_buffer_length变量至少这么大

5. 基于时间点的恢复

例:
(1)上午10点发生误操作,可以用如下语句备份和BINLOG将数据恢复到故障前
#mysqlbinlog --stop-date="2010-10-31 9:59:59" /usr/local/mysql/var/mysql-bin.000013 |mysql -uroot -p

(2)跳过故障时间点,继续执行后面的BINLOG,完成恢复
#mysqlbinlog --start-date="2010-10-31 10:01:00" /usr/local/mysql/var/mysql-bin.000013 |mysql -uroot -p

基于位置恢复(不完全恢复)
和基于时间点恢复类是,但是更加精确.因为同一时间点可能有多条SQL语句执行;
例:
#mysqlbinlog --start-date="2010-10-31 9:55:00" --stop-date="2010-10-31 10:05:00" /usr/local/mysql/var/mysql-bin.000013 > /tmp/mysql_restore.sql

该命令将在/tmp/目录下创建小的文件,编辑它找到错误语句前后的位置号,例如前后位置号分别是368312 和 368315
(2)恢复了以前的备份文件后,输入
#mysqlbinlog --stop-position="368312" /usr/local/mysql/var/mysql-bin.000013 |mysql -uroot -p

#mysqlbinlog --start-position="368315" /usr/local/mysql/var/mysql-bin.000013 |mysql -uroot -p


7. 参考

mysqldump error

发表在 db | 标签为 , | mysqldump已关闭评论

mysqldump error

mysqldump备份有时报错了,内容如下:

mysql@localhost mysql]$ mysqldump --single-transaction -A -uroot -proot123 --master-data=2 > /u01/backup/testbk.sql
Warning: Using a password on the command line interface can be insecure.
Error: Couldn't read status information for table slave_master_info ()
mysqldump: Couldn't execute 'show create table `slave_master_info`': Table 'mysql.slave_master_info' doesn't exist (1146)

错误提示有innodb_index_stats,innodb_table_stats,slave_master_info,slave_relay_log_info,slave_worker_info等几个
使用select语句进行查询时,也会提示这些表不存在

最终解决方法是:删除错误的表后重建

1.查询不可使用的表
show create table mysql.innodb_index_stats;
show create table mysql.innodb_table_stats;
show create table mysql.slave_master_info;
show create table mysql.slave_relay_log_info;
show create table mysql.slave_worker_info;

2.删除上述5张表或有错误的表
drop table mysql.innodb_index_stats;
drop table mysql.innodb_table_stats;
drop table mysql.slave_master_info;
drop table mysql.slave_relay_log_info;
drop table mysql.slave_worker_info;

3.进入data/mysql相应文件夹找到关于5张表的数据文件(.frm,.ibd)并删除
rm -rf innodb_index_stats.*
rm -rf innodb_table_stats.*
rm -rf slave_master_info.*
rm -rf slave_relay_log_info.*
rm -rf slave_worker_info.*

4. 查找表结构
去找$MYSQL_HOME/share/mysql_system_tables.sql,分别search到每一表的建表语句,然后重建设;

发表在 db | 标签为 , | mysqldump error已关闭评论

mysql innodb_table_stats does not exist

InnoDB: Error: table `mysql`.`innodb_table_stats` does not exist in the InnoDB internal

这个原因很明显 ,是mysql库的innodb_table_stats表损坏了。

再点击 mysql的innodb_index_stats 表,同样损坏。

 

解决方法:

损坏了,当然就是删除重补回来。

1,删除表,进入mysql库,把innodb前缀的表文件删除。

[root@AY140311174146476cc0Z mysql]# pwd
/usr/local/mysql/data/mysql
[root@AY140311174146476cc0Z mysql]# rm -f innodb_*

2,重新执行sql文件语句。当然语句来自安装包。

具体路径,如5.6为例:mysql-5.6.19/scripts/mysql_system_tables.sql

语句贴出来吧

CREATE TABLE IF NOT EXISTS innodb_index_stats (
    database_name           VARCHAR(64) NOT NULL,
    table_name          VARCHAR(64) NOT NULL,
    index_name          VARCHAR(64) NOT NULL,
    last_update         TIMESTAMP NOT NULL NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    /* there are at least:
    stat_name='size'
    stat_name='n_leaf_pages'
    stat_name='n_diff_pfx%' */
    stat_name           VARCHAR(64) NOT NULL,
    stat_value          BIGINT UNSIGNED NOT NULL,
    sample_size         BIGINT UNSIGNED,
    stat_description        VARCHAR(1024) NOT NULL,
    PRIMARY KEY (database_name, table_name, index_name, stat_name)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0
 
 
 
CREATE TABLE IF NOT EXISTS innodb_table_stats (
    database_name           VARCHAR(64) NOT NULL,
    table_name          VARCHAR(64) NOT NULL,
    last_update         TIMESTAMP NOT NULL NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    n_rows              BIGINT UNSIGNED NOT NULL,
    clustered_index_size        BIGINT UNSIGNED NOT NULL,
    sum_of_other_index_sizes    BIGINT UNSIGNED NOT NULL,
    PRIMARY KEY (database_name, table_name)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0

 

然后,再查询相关的innodb表。看下是否还有错误 。

这个错误到此解决了。

发表在 db | 标签为 | mysql innodb_table_stats does not exist已关闭评论

mysql reset slave / reset master

RESET SLAVE

官方的解释如下

1)RESET SLAVE makes the slave forget its replication position in the
master's binary log. This statement is meant to be used for a clean
start: It clears the master info and relay log info repositories,
deletes all the relay log files, and starts a new relay log file. It
also resets to 0 the replication delay specified with the MASTER_DELAY
option to CHANGE MASTER TO. To use RESET SLAVE, the slave replication
threads must be stopped (use STOP SLAVE if necessary).

2)RESET SLAVE does not change any replication connection parameters
such as master host, master port, master user, or master password, which
are retained in memory. This means that START SLAVE can be issued
without requiring a CHANGE MASTER TO statement following

reset slave

其实,它是直接删除master.info和relay-log.info文件,并删除所有的relay log,然后重新生成一个新的relay log,即使relay log中还有SQL没有被SQL线程apply完。

但是RESET SLAVE有个问题,它虽然删除了上述文件,但内存中的change master信息并没有删除,此时,可直接执行start
slave,但因为删除了master.info和relay-log.info,它会从头开始接受主的binlog并应用。(注意:这里所说的从头是说:reset的时候,正在接受的主的binlog,从新接受这个binlog).如果SQL
thread 正在复制临时表的过程中,执行了stop slave ,并且执行了reset slave,这些被复制的临时表将被删除。

reset master 做了什么?

1. reset master 将删除日志索引文件中记录的所有binlog文件,创建一个新的日志文件 起始值从000001 开始,

2. reset master 不能用于有任何slave 正在运行的主从关系的主库。因为在slave 运行时刻 reset master
命令不被支持,reset master 将master 的binlog从000001 开始记录,slave 记录的master log
则是reset master 时主库的最新的binlog,从库会报错无法找的指定的binlog文件。

发表在 db | mysql reset slave / reset master已关闭评论

Mysql Replicate Relay log read failure

一、描述

Mysql主从复制模式中,slave上报错 “relay log read failure”,导致主从同步停止。

mysql> show slave status\G
...
Master_Log_File: dd-bin.002542
Relay_Master_Log_File: dd-bin.002540
Exec_Master_Log_Pos: 950583017
Last_Error: Relay log read failure:...
...

二、分析

      报错信息为从库“无法读取relay log 里的条目”,可能原因为master库的binglog错误,或slave库的中继日志错误。或者为网络问题及bug原因。

      一般是由于网络故障或slave库压力过大,导致relay-log格式错误造成的。找到当前已经同步的时间点,重新设置主从同步,就会产生新的中继日志,恢复正常。

三、问题处理

从"show  slave  status\G"的输出中,找到如下信息:

Relay_Master_Log_File: dd-bin.002540     //slave库已读取的master的binlog

Exec_Master_Log_Pos: 950583017           //在slave上已经执行的position位置点



    停掉slave,以slave已经读取的binlog文件,和已经执行的position为起点,重新设置同步。会产生新的中继日志,问题解决。

(不需要指定host,user,password等,默认使用当前已经设置好的)

mysql>stop slave;

mysql>change master to master_log_file='dd-bin.002540' , master_log_pos=950583017;

mysql>start slave;



四、验证结果

再次查看,错误已经解决,slave 开始追 master 的日志

mysql>show  slave status\G

Exec_Master_Log_Pos: 225927489        //slave上已经执行的position已经变化

Seconds_Behind_Master: 58527            //slave  落后主库的时间,单位秒



过几秒钟,再次查看。离与master同步更近了

mysql>show  slave status\G

Exec_Master_Log_Pos: 307469867

Seconds_Behind_Master: 29570

发表在 db | 标签为 | Mysql Replicate Relay log read failure已关闭评论

RPC

RPC(远程过程调用)是什么

  • 简单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。
  • RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯)
  • RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(类似于Http的工作方式)
  • RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。

远程过程调用发展历程

  • ONC RPC (开放网络计算的远程过程调用),OSF RPC(开放软件基金会的远程过程调用)
  • CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构)
  • DCOM(分布式组件对象模型),COM+
  • Java RMI
  • .NET Remoting
  • XML-RPC,SOAP,Web Service
  • PHPRPC,Hessian,JSON-RPC
  • Microsoft WCF,WebAPI
  • ZeroC Ice,Thrift,GRPC
  • Hprose

早期的 RPC

  • 第一代 RPC(ONC RPC,OSF RPC)不支持对象的传递。
  • CORBA 太复杂,各种不同实现不兼容,一般程序员也玩不转。
  • DCOM,COM+ 逃不出 Windows 的手掌心。
  • RMI 只能在 Java 里面玩。
  • .NET Remoting 只能在 .NET 平台上玩。

XML-RPC,SOAP,WebService

  • 冗余数据太多,处理速度太慢。
  • RPC 风格的 Web Service 跨语言性不佳,而 Document 风格的 Web Service 又太过难用。
  • Web Service 没有解决用户的真正问题,只是把一个问题变成了另一个问题。
  • Web Service 的规范太过复杂,以至于在 .NET 和 Java 平台以外没有真正好用的实现,甚至没有可用的实现。
  • 跨语言跨平台只是 Web Service 的一个口号,虽然很多人迷信这一点,但事实上它并没有真正实现。

PHPRPC

  • 基于 PHP 内置的序列化格式,在跨语言的类型映射上存在硬伤。
  • 通讯上依赖于 HTTP 协议,没有其它底层通讯方式的选择。
  • 内置的加密传输既是特点,也是缺点。
  • 虽然比基于 XML 的 RPC 速度快,但还不是足够快。

Hessian

  • 二进制的数据格式完全不具有可读性。
  • 官方只提供了两个半语言的实现(Java,ActionScript 和不怎么完美的 Python 实现),其它语言的第三方实现良莠不齐。
  • 支持的语言不够多,对 Web 前端的 JavaScript 完全无视。
  • 虽然是动态 RPC,但动态性仍然欠佳。
  • 虽然比基于 XML 的 RPC 速度快,但还不是足够快。

JSON-RPC

  • JSON 具有文本可读性,且比 XML 更简洁。
  • JSON 受 JavaScript 语言子集的限制,可表示的数据类型不够多。
  • JSON 格式无法表示数据内的自引用,互引用和循环引用。
  • 某些语言具有多种版本的实现,但在类型影射上没有统一标准,存在兼容性问题。
  • JSON-RPC 虽然有规范,但是却没有统一的实现。在不同语言中的各自实现存在兼容性问题,无法真正互通。

Microsoft WCF,WebAPI

  • 它们是微软对已有技术的一个 .NET 平台上的统一封装,是对 .NET Remoting、WebService 和基于 JSON 、XML 等数据格式的 REST 风格的服务等技术的一个整合。
  • 虽然号称可以在 .NET 平台以外来调用它的这些服务,但实际上跟在 .NET 平台内调用完全是两码事。它没有提供任何在其他平台的语言中可以使用的任何工具。

ZeroC Ice,Thrift,GRPC

  • 初代 RPC 技术的跨语言面向对象的回归。
  • 仍然需要通过中间语言来编写类型和接口定义。
  • 仍然需要用代码生成器来将中间语言编写的类型和接口定义翻译成你所使用的编程语言的客户端和服务器端的占位程序(stub)。
  • 你必须要基于生成的服务器代码来单独编写服务,而不能将已有代码直接作为服务发布。
  • 你必须要用生成的客户端代码来调用服务,而没有其它更灵活的方式。
  • 如果你的中间代码做了修改,以上所有步骤你都要至少重复一遍。

Hprose

  • 无侵入式设计,不需要单独定义类型,不需要单独编写服务,已有代码可以直接发布为服务。
  • 具有丰富的数据类型和完美的跨语言类型映射,支持自引用,互引用和循环引用数据。
  • 支持众多传输方式,如 HTTP、TCP、Websocket 等。
  • 客户端具有更灵活的调用方式,支持同步调用,异步调用,动态参数,可变参数,引用参数传递,多结果返回(Golang)等语言特征,Hprose 2.0 甚至支持推送。
  • 具有良好的可扩展性,可以通过过滤器和中间件实现加密、压缩、缓存、代理等各种功能性扩展。
  • 兼容的无差别跨语言调用
  • 支持更多的常用语言和平台
  • 支持浏览器端的跨域调用
  • 没有中间语言,无需学习成本
  • 性能卓越,使用简单

发表在 technologys | RPC已关闭评论

db

RDS:

Oracle - Business
DB2    - Business
PostgreSQL    - Free
Microsoft SQL Server
MySQL - Free

Embed:

SQLite - Free
Microsoft Access - Free

Document:

MongoDb - Free
CouchDB - Free

Memory/Key Value:

Redis - Free
Memcache - Free
Cassandra - Free

Other:

HBase - Free
Infinite Graph - Free
InfoGrid - Free
Riak - Free

发表在 db | db已关闭评论

.NET技术

问题

大家是否想过:

  • .NET究竟包含哪些技术呢?
  • 我所掌握的技术这个子集,在.NET技术大系这个超集里面占地比例是什么呢?
  • 我究竟还没有掌握多少.NET技术呢?
  • 面试的时候会考哪些技术呢?

相信大家也看过Java的技术栈,一个金字塔形状的(我一下子没找回,如果你知道,烦请告诉我),包含了繁多的技术:
点击查看原图

查看大图

这些年来,看过n多.Net架构图/技术栈,搜索了很久,没有找到一个符合我要求的“较为全面”地表述.Net技术大系的图表。相信微软内部有更全面的,但可惜我没有找到。

互联网上来去都是那几个简单的按版本新增分类等10来个点的,譬如这个:

 点击查看原图

或者这个按照.NET版本新增技术的:
点击查看原图

圣殿骑士 在 新加坡架构师面试总结 里面发表过一张.NET架构师面试需要的技术总结图:

点击查看原图
 

查看大图

不过这个总结图面向的是.NET架构师需要掌握的技术,和我需要的不一样。

 

.NET技术栈

最近找工作,面试了多家公司,不同公司有不同的技术要求,我把这些技术,结合我已经掌握的技术,总结了一下.Net相关技术,大约10个大类50个技术点,花了一点时间搞个.NET技术栈概览。

 

从最底层的到最顶层:

  • 操作系统
  • CLI
  • CLR
  • CTS/CLS/CIL
  • .NET Fx
  • CLI 语言
  • DLR
  • DLR 语言
  • Desktop 桌面
  • Web 网络
  • SOA
  • SDKs
  • OWIN
  • IDE 编辑器
  • Platforms 平台
  • Productivity 生产力
  • Build 编译
  • Testing 测试
  • Deploy 发布
  • Tools 工具
  • Data 数据存储
  • Components 组件

 

 

这个图表里的分类未必准确,相关技术也难免会有遗漏,欢迎大家指点以便不断改进。

以下是预览图:

点击查看原图


查看大图

摘自: http://www.cnblogs.com/unruledboy/p/NetStack.html

发表在 .net | .NET技术已关闭评论

samba

安装 SAMBA 组件

sudo apt-get install samba smbfs smbclient

配置相关参数

sudo gedit /etc/samba/smb.conf

文件中相关属性如下

1.全局设置部分

security = user
    这行设置了samba的安全等级,Samba一共可以设置四个安全登记,由底到高分别为:
    share        这个选项表示任何人都可以不需要输入密码登录。
    user          这个是Samba的默认级别,要求每个用户必须输入密码才能登录。
    server      user级别的密码都是保存在本机上,而server级别的密码和用户名都保存在另一台主机上。
    domain    这个级别要求网络里必须有一台Windows的域控制器,验证工作由域控制器来完成。
    需要注意,只要输入用户名和密码的级别,其用户名一定首先也是Linux系统内的用户

workgroup = MSHOME
    这部分是Windows主机的工作组明,Windows主机必须在同一个工作组中
server
string = %h
server(Samba,Ubuntu)

    这个选项是显示在Windows上的信息,可以自定义,其中%h为Samba配置文件中的变量,代表了主机名,即使用hostname命令得到的主机名

map to guest = bad user

    当 security = user 时,这个选项必须注释掉,如:# map to guest = bad user

2.共享设置部分

添加一个共享文件夹设置如下
[share]

    共享文件名,不需要与实际文件名一致
comment = my
share directory

    对这个共享分支的描述
path = /home/share

    系统的共享目录,必须为绝对路径
public = yes

    是否允许所有人都能够看到此目录,no为看不到
writable = yes

    是否允许用户在此目录下可写,no为不可些,如果可写,还需要目录具有写权限
read only = yes

    设置用户是否只读
vaild users = username

    设置只有 username 用户有效

SAMBA 用户管理

在需要密码登录时有效,在设置用户密码时,此用户必须是LINUX系统的用户,如下面的指令 user 必须先是系统的用户

sudo smbpasswd -a user

接下来根据提示输入两次密码即可

smbpasswd 指令相关参数如下:

-a    新添加一个Samba用户。
-d    禁用一个Samba用户。
-e    使禁用的Samba用户解禁。


启动 SAMBA 服务

复制代码
# 停止 SAMBA 服务
sudo /etc/init.d/smbd stop
# 启动 SAMBA 服务
sudo /etc/init.d/smbd start
# 重新启动
sudo /etc/init.d/smbd restart
复制代码

在 WINDOWS 下访问共享目录

# 在资源管理器,或浏览器中直接输入即可, “192.168.1.10” 为服务器 IP
\\192.168.1.10

故障测试指令

testparm

Samba配置文件常用参数详解

Samba配置文件常用参数详解
 
Samba的主配置文件叫smb.conf,默认在/etc/samba/目录下。
smb.conf含有多个段,每个段由段名开始,直到下个段名。每个段名放在方括号中间。每段的参数的格式是:名称=指。配置文件中一行一个段名和参数,段名和参数名不分大小写。
除了[global]段外,所有的段都可以看作是一个共享资源。段名是该共享资源的名字,段里的参数是该共享资源的属性。
Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确。使用testparm –v命令可以详细的列出smb.conf支持的配置参数。
 
全局参数:
==================Global Settings ===================
[global]
 
config file = /usr/local/samba/lib/smb.conf.%m
说明:config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件
不存在,则该项无效。这个参数很有用,可以使得samba配置更灵活,可以让一台samba服务器模拟多台不同配置的服务器。比如,你想让PC1(主机名)这台电脑在访问Samba

Server时使用它自己的配置文件,那么先在/etc/samba/host/下为PC1配置一个名为smb.conf.pc1的文件,然后在smb.conf中加入:config
file = /etc/samba/host/smb.conf.%m。这样当PC1请求连接Samba
Server时,smb.conf.%m就被替换成smb.conf.pc1。这样,对于PC1来说,它所使用的Samba服务就是由smb.conf.pc1定义的,而其他机器访问Samba
Server则还是应用smb.conf。

 
workgroup = WORKGROUP
说明:设定 Samba Server 所要加入的工作组或者域。
 
server string = Samba Server Version %v
说明:设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
 
netbios name = smbserver
说明:设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了。
 
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
说明:设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
 
hosts allow = 127. 192.168.1. 192.168.10.1
说明:表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。
例如:hosts allow=172.17.2.EXCEPT172.17.2.50
表示容许来自172.17.2.*.*的主机连接,但排除172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
hosts allow=M1,M2
表示容许来自M1和M2两台计算机连接
hosts allow=@xq
表示容许来自XQ网域的所有计算机连接
 
max connections = 0
说明:max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。
 
deadtime = 0
说明:deadtime用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。
 
time server = yes/no
说明:time server用来设置让nmdb成为windows客户端的时间服务器。
 
log file = /var/log/samba/log.%m
说明:设置Samba
Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba
Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba
Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。
 
max log size = 50
说明:设置Samba Server日志文件的最大容量,单位为kB,0代表不限制。
 
security = user
说明:设置用户访问Samba Server的验证方式,一共有四种验证方式。
1. share用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
3. server:依靠其他Windows NT/2000或Samba

Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows
NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。

4. domain:域安全级别,使用主域控制器(PDC)来完成认证。
 
passdb backend = tdbsam
说明:passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实
用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
2.tdbsam该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的参数很多,我们列出几个主要的。
pdbedit –a username:新建Samba账户。
pdbedit –x username:删除Samba账户。
pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit –Lv:列出Samba用户列表的详细信息。
pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
pdbedit –c “[]” –u username:恢复该Samba用户的账号。
3.ldapsam该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”
 
encrypt passwords = yes/no
说明:是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。
 
smb passwd file = /etc/samba/smbpasswd
说明:用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建。
 
username map = /etc/samba/smbusers
说明:用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。比如:root
= administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba
Server,更贴近windows用户的习惯。
 
guest account = nobody
说明:用来设置guest用户名。
 
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
说明:用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度。
 
domain master = yes/no
说明:设置Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务。
 
local master = yes/no
说明:local master用来指定Samba Server是否试图成为本地网域主浏览器。如果设为no,则永远不会成为本地网域主浏览器。但是即使设置为yes,也不等于该Samba Server就能成为主浏览器,还需要参加选举。
 
preferred master = yes/no
说明:设置Samba Server一开机就强迫进行主浏览器选举,可以提高Samba
Server成为本地网域主浏览器的机会。如果该参数指定为yes时,最好把domain
master也指定为yes。使用该参数时要注意:如果在本Samba Server所在的子网有其他的机器(不论是windows
NT还是其他Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。
如果同一个区域内有多台Samba Server,将上面三个参数设定在一台即可。
 
os level = 200
说明:设置samba服务器的os level。该参数决定Samba
Server是否有机会成为本地网域的主浏览器。os level从0到255,winNT的os level是32,win95/98的os
level是1。Windows 2000的os level是64。如果设置为0,则意味着Samba
Server将失去浏览选择。如果想让Samba Server成为PDC,那么将它的os level值设大些。
 
domain logons = yes/no
说明:设置Samba Server是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。
 
logon . = %u.bat
说明:当使用者用windows客户端登陆,那么Samba将提供一个登陆档。如果设置成%u.bat,那么就要为每个用户提供一个登陆档。如果人比较多,那就比较麻烦。可以设置成一个具体的文件名,比如start.bat,那么用户登陆后都会去执行start.bat,而不用为每个用户设定一个登陆档了。这个文件要放置在[netlogon]的path设置的目录路径下。
 
wins support = yes/no
说明:设置samba服务器是否提供wins服务。
 
wins server = wins服务器IP地址
说明:设置Samba Server是否使用别的wins服务器提供wins服务。
 
wins proxy = yes/no
说明:设置Samba Server是否开启wins代理服务。
 
dns proxy = yes/no
说明:设置Samba Server是否开启dns代理服务。
 
load printers = yes/no
说明:设置是否在启动Samba时就共享打印机。
 
printcap name = cups
说明:设置共享打印机的配置文件。
 
printing = cups
说明:设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx
 
共享参数:
================== Share Definitions ==================
[共享名]
 
comment = 任意字符串
说明:comment是对该共享的描述,可以是任意字符串。
 
path = 共享目录路径
说明:path用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的Netbios名,用宏表示主要用于[homes]共享域。例如:如果我们不打算用home段做为客户的共享,而是在/home/share/下为每个Linux用户以他的用户名建个目录,作为他的共享目录,这样path就可以写成:path
= /home/share/%u;
。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径,作为不同机器的共享资源,就可以这样写:path
= /home/share/%m 。
 
browseable = yes/no
说明:browseable用来指定该共享是否可以浏览。
 
writable = yes/no
说明:writable用来指定该共享路径是否可写。
 
available = yes/no
说明:available用来指定该共享资源是否可用。
 
admin users = 该共享的管理者
说明:admin users用来指定该共享的管理员(对该共享具有完全控制权限)。在samba 3.0中,如果用户验证方式设置成“security=share”时,此项无效。
例如:admin users =bobyuan,jane(多个用户中间用逗号隔开)。
 
valid users = 允许访问该共享的用户
说明:valid users用来指定允许访问该共享资源的用户。
例如:valid users = bobyuan,@bob,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示。)
 
invalid users = 禁止访问该共享的用户
说明:invalid users用来指定不允许访问该共享资源的用户。
例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)
 
write list = 允许写入该共享的用户
说明:write list用来指定可以在该共享下写入文件的用户。
例如:write list = bobyuan,@bob
 
public = yes/no
说明:public用来指定该共享是否允许guest账户访问。
 
guest ok = yes/no
说明:意义同“public”。
 
几个特殊共享:
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
; valid users = MYDOMAIN\%S
 
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
 
[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
share modes = no
 
[Profiles]
path = /var/lib/samba/profiles
browseable = no
guest ok = yes
 

 

发表在 linux | samba已关闭评论

linux echo -n、-e

echo -n 不换行输出

$echo -n "123"
$echo "456"
最终输出 
123456
而不是
123
456
echo -e
处理特殊字符
若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
$echo -e "a\bdddd"
dddd
$echo -e "a\adddd" //输出同时会发出报警声音
adddd
$echo -e "a\ndddd" //自动换行
a
dddd
发表在 linux | 标签为 | linux echo -n、-e已关闭评论

windows 10 远程桌面 第一次登录之前 你必须更改密码 请更新密码

MSTSC方式登录Windows 2012服务器,登录失败

问题描述

 

对于密码鉴权方式创建的Windows 2012弹性云服务器,使用初始密码以MSTSC方式登录时,登录失败,系统显示“第一次登录之前,你必须更改密码。请更新密码,或者与系统管理员或技术支持联系”。
可能原因

用户本地使用的计算机(即客户机)操作系统为Windows 10。

由于Windows 10操作系统的自身限制,不能以初始密码直接远程连接操作系统为Windows 2012的弹性云服务器。
处理方法

    方法一

    更换使用Windows 7操作系统的计算机作为客户机,远程连接操作系统为Windows 2012的弹性云服务器。

    方法二

    继续使用Windows 10 客户机远程登录,但是,需先修改弹性云服务器的初始密码。
        首次登录,以VNC方式登录操作系统为Windows 2012的弹性云服务器。
        登录成功后,按照界面提示修改弹性云服务器的密码。
        使用修改后的密码,以MSTSC方式远程登录。

    方法三

    继续使用Windows 10 客户机,并以初始密码远程登录。
        单击“开始”菜单,在“搜索程序和文件”中,输入“mstsc”。

        系统进入“远程桌面连接”界面。
        依次输入弹性IP、用户名“administrator”以及创建弹性云服务器时设置的登录密码进行连接。

        连接失败,系统提示“第一次登录之前,你必须更改密码。请更新密码,或者与系统管理员或技术支持联系”。
        单击“远程桌面连接”页面左下角的“选项”。
        在“常规”页签,单击“连接设置”栏的“另存为”,保存“.rdp”格式的远程桌面文件。
        使用Notepad++打开4中保存的远程桌面文件。
        编辑远程桌面文件,在文件的最后一行,添加如下语句并保存。

        enablecredsspsupport:i:0
        双击更新后的“.rdp”文件,打开远程桌面连接。
        单击“连接”,重新连接操作系统为Windows 2012的弹性云服务器。

发表在 windows | windows 10 远程桌面 第一次登录之前 你必须更改密码 请更新密码已关闭评论

ascii

点击查看原图

ASCII控制字符

二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义
0000 0000 0 00 NUL 空字符(Null)
0000 0001 1 01 SOH 标题开始
0000 0010 2 02 STX 本文开始
0000 0011 3 03 ETX 本文结束
0000 0100 4 04 EOT 传输结束
0000 0101 5 05 ENQ 请求
0000 0110 6 06 ACK 确认回应
0000 0111 7 07 BEL 响铃
0000 1000 8 08 BS 退格
0000 1001 9 09 HT 水平定位符号
0000 1010 10 0A LF 换行键
0000 1011 11 0B VT 垂直定位符号
0000 1100 12 0C FF 换页键
0000 1101 13 0D CR 归位键
0000 1110 14 0E SO 取消变换(Shift out)
0000 1111 15 0F SI 启用变换(Shift in)
0001 0000 16 10 DLE 跳出数据通讯
0001 0001 17 11 DC1 设备控制一(XON 启用软件速度控制)
0001 0010 18 12 DC2 设备控制二
0001 0011 19 13 DC3 设备控制三(XOFF 停用软件速度控制)
0001 0100 20 14 DC4 设备控制四
0001 0101 21 15 NAK 确认失败回应
0001 0110 22 16 SYN 同步用暂停
0001 0111 23 17 ETB 区块传输结束
0001 1000 24 18 CAN 取消
0001 1001 25 19 EM 连接介质中断
0001 1010 26 1A SUB 替换
0001 1011 27 1B ESC 跳出
0001 1100 28 1C FS 文件分割符
0001 1101 29 1D GS 组群分隔符
0001 1110 30 1E RS 记录分隔符
0001 1111 31 1F US 单元分隔符
0111 1111 127 7F DEL 删除

ASCII可显示字符

二进制 十进制 十六进制 图形
0010 0000 32 20 (空格)(␠)
0010 0001 33 21 !
0010 0010 34 22 "
0010 0011 35 23 #
0010 0100 36 24 $
0010 0101 37 25  %
0010 0110 38 26 &
0010 0111 39 27 '
0010 1000 40 28 (
0010 1001 41 29 )
0010 1010 42 2A *
0010 1011 43 2B +
0010 1100 44 2C ,
0010 1101 45 2D -
0010 1110 46 2E .
0010 1111 47 2F /
0011 0000 48 30 0
0011 0001 49 31 1
0011 0010 50 32 2
0011 0011 51 33 3
0011 0100 52 34 4
0011 0101 53 35 5
0011 0110 54 36 6
0011 0111 55 37 7
0011 1000 56 38 8
0011 1001 57 39 9
0011 1010 58 3A :
0011 1011 59 3B ;
0011 1100 60 3C <
0011 1101 61 3D =
0011 1110 62 3E >
0011 1111 63 3F ?
二进制 十进制 十六进制 图形
0100 0000 64 40 @
0100 0001 65 41 A
0100 0010 66 42 B
0100 0011 67 43 C
0100 0100 68 44 D
0100 0101 69 45 E
0100 0110 70 46 F
0100 0111 71 47 G
0100 1000 72 48 H
0100 1001 73 49 I
0100 1010 74 4A J
0100 1011 75 4B K
0100 1100 76 4C L
0100 1101 77 4D M
0100 1110 78 4E N
0100 1111 79 4F O
0101 0000 80 50 P
0101 0001 81 51 Q
0101 0010 82 52 R
0101 0011 83 53 S
0101 0100 84 54 T
0101 0101 85 55 U
0101 0110 86 56 V
0101 0111 87 57 W
0101 1000 88 58 X
0101 1001 89 59 Y
0101 1010 90 5A Z
0101 1011 91 5B [
0101 1100 92 5C \
0101 1101 93 5D ]
0101 1110 94 5E ^
0101 1111 95 5F _
二进制 十进制 十六进制 图形
0110 0000 96 60 `
0110 0001 97 61 a
0110 0010 98 62 b
0110 0011 99 63 c
0110 0100 100 64 d
0110 0101 101 65 e
0110 0110 102 66 f
0110 0111 103 67 g
0110 1000 104 68 h
0110 1001 105 69 i
0110 1010 106 6A j
0110 1011 107 6B k
0110 1100 108 6C l
0110 1101 109 6D m
0110 1110 110 6E n
0110 1111 111 6F o
0111 0000 112 70 p
0111 0001 113 71 q
0111 0010 114 72 r
0111 0011 115 73 s
0111 0100 116 74 t
0111 0101 117 75 u
0111 0110 118 76 v
0111 0111 119 77 w
0111 1000 120 78 x
0111 1001 121 79 y
0111 1010 122 7A z
0111 1011 123 7B {
0111 1100 124 7C |
0111 1101 125 7D }
0111 1110 126 7E ~
发表在 technologys | ascii已关闭评论

dmarc

基于域的邮件验证、报告和一致性(DMARC) 这个规范旨在减少邮件滥用(例如通过伪造邮件的“From:
报头来篡改原件的入站垃圾邮件和网络钓鱼邮件。 DMARC 帮助域拥有者使用“域名系统”(DNS)来向收件服务器告知其 DMARC
策略,例如他们希望这些服务器如何处理自称来自他们域但无法验证实际来源的邮件。 收件服务器在处理入站邮件时通过 DNS
查询检索到的这个策略可以向服务器表明应该隔离或拒收不符合这个策略的邮件,或根本不采取任何操作(例如继续照常处理邮件)。 除了这个策略以外,该域的
DMARC DNS 记录也可以包含服务器请求来向某人发送 DMARC
报告、概述自称来自此域的入站邮件的总数、它们是否通过验证、以及任何失败的详细信息。 DMARC
的报告功能在确定您的邮件验证流程是否有效,以及伪造邮件使用您域名的频率时极其有用。

在“安全设置”对话框的“发件人验证”部分中,提供以下三个部分供您配置 MDaemon 的 DMARC 验证和报告功能: DMARC 验证、DMARC 报告和 DMARC 选项。

DMARC 验证

作为 DMARC 验证流程的一部分,MDaemon 对在每封入站邮件的“From:” 报头中找到的域执行 DMARC DNS 查询。 这用来确定该域是否使用 DMARC,如果使用了 DMARC 则检索其“DMARC DNS 记录”,其中包含了它的策略和其他 DMARC 相关信息。 此外,DMARC 使用 SPFDKIM 来验证每封邮件,并要求它至少通过一项测试来通过 DMARC 验证。 如果该邮件通过验证,则按照 MDaemon
其余投递和过滤流程来照常处理这封邮件。 如果未通过验证,则取决于该域的 DMARC 策略以及您对于 MDaemon
如何处理这些邮件的配置来确定该邮件的命运。

如果一封邮件未通过 DMARC 验证,而且 DMARC 域拥有一个“p=none”策略,则不会采取任何惩罚性操作并照常处理这封邮件。 相反,当 DMARC 域拥有一个存在限制的策略,例如“p=quarantine”或“p=reject”,MDaemon 可以有选择性地将该邮件自动过滤到接收用户垃圾邮件的文件夹。 您也可以选择在该域使用“p=reject”策略时,让 MDaemon 完全拒收未通过验证的邮件。 对于使用限制性策略且未通过验证的邮件,MDaemon 将取决于策略插入“X-MDDMARC-Fail-policy: quarantine”或“X-MDDMARC-Fail-policy: reject”报头。 这帮助您使用“内容过滤器”,基于这些报头来执行一些操作,例如将该邮件发送至特定的文件夹进行审核。

建议默认情况下为大多数 MDaemon 配置启用 DMARC 验证。

DMARC 报告


MDaemon 查询 DNS 是否存在 DMARC 记录时,该记录可能包含一些标签,指示域的拥有者是希望接收与声称来自此域邮件相关的
DMARC 综合报告还是故障报告。 “DMARC 报告”屏幕上的一些选项供您用来指定是否希望发送请求的报告类型,并指定这些报告应该包含的元数据。
将在每晚午夜(UTC)发送综合报告,将按邮件来发送故障报告,因为每个发生的事件将触发这个报告。 报告以打包压缩(ZIP)的 XML
文件附件形式发送,而且在线提供各种分析工具,帮助收件人更简便地进行查看。

默认情况下 MDaemon 不发送综合或故障报告。 如果您希望发送这些报告,请在“DMARC 报告”屏幕上启用相应的选项。

DMARC 选项

“DMARC 选项”屏幕包含各种选项,例如在 DKIM 报告中包含特定信息、记录 DMARC DNS 记录、以及更新 MDaemon 用于 DMARC 的“公共后缀”文件。

DMARC 验证和邮件列表

因为 DMARC 的目的在于确保在邮件“From:” 报头中找到的域不被伪造,必须允许发件服务器代表该域来发送邮件。 这会给邮件列表带来一个问题,因为列表通常代表来自外部域的列表成员来分发邮件,并使“From:” 报头保持不变。 这就意味着在收件服务器尝试对这些邮件使用 DMARC 验证时,邮件会被不关联“From:
报头域的服务器发送。 如果 DMARC 域正好使用了存在限制的 DMARC 策略,这会导致邮件被隔离甚至被收件服务器拒收。
在某些情况下,这会导致从列表的成员中删除收件人。 为了避免这个问题,在 MDaemon 发现列表邮件来自使用了受限 DMARC
策略的域时,MDaemon 将使用邮件列表的地址来替换“
From:” 报头。 此外,您也开始配置 MDaemon 在列表邮件来自存在受限策略的域时,拒收这些邮件。 后者使所在域使用了受限策略的用户能够向列表发送邮件。 用来替换“From:” 报头的选项位于邮件列表编辑器的“报头”屏幕。 用来拒收邮件的选项位于“设置”屏幕。

为您的 MDaemon 域使用 DMARC

如果您希望为您自己的域使用
DMARC,这就意味着您希望支持 DMARC 的收件服务器使用 DMARC 来验证声称由您发送的邮件,您首先必须确保您已为该域创建了格式正确的
SPF 和 DKIM DNS 记录;而且您必须使这些选项正确工作来使用 DMARC。 如果您正在使用 DKIM,您也要配置 MDaemon
的“DKIM 签名”选项来签署该域的邮件。 此外,您必须为该域创建一个 DMARC DNS 记录。 通过查询 DNS 是否存在这个拥有特殊格式的
TXT 记录,收件服务器可以确定您的 DMARC 策略和各种可选的参数,例如: 您使用的验证模式、您是否希望接收综合报告、应接收报告的邮件地址等。

一旦您正确配置了
DMARC 并开始接收 DMARC XML 报告,您可以使用大量在线工具来阅读这些报告并诊断任何潜在的问题。 方便起见,在
\MDaemon\App\ 文件夹中还为您提供一个 DMARC Reporter 工具。 请参阅 DMARCReporterReadMe.txt
来获得使用说明。

定义 DMARC TXT 资源记录

以下是 DMARC 记录常用组件的基本概述。 要获得更多详细信息或有关高级配置的更多信息,请参阅: www.dmarc.org.

拥有者字段

DMARC 资源记录的“拥有者”(也叫做“姓名”或“左侧”)字段必须始终为 _dmarc,如果您希望指定该记录应用到的域或子域,也可以采用 _dmarc.domain.name 这种形式。

示例:

example.com 的 DMARC 记录

_dmarc IN TXT “v=DMARC1;p=none”

该记录将应用于发自 user@example.com 或子域为 example.com 的电子邮件,例如 user@support.example.com、user@mail.support.example.com 等。

_dmarc.support.example.com IN TXT “v=DMARC1;p=none”

该记录仅应用于发自 user@support.example.com 的电子邮件,不应用于发自 user@example.com 的电子邮件。

_dmarc.support IN TXT “v=DMARC1;p=none”

该记录将应用于发自: user@support.example.com、user@a.support.example.com、user@a.b.support.example.com 等的电子邮件。

DMARC 记录标签和值

必需标签

标签

备注

v=

DMARC1

这是“版本”标签,必须作为该记录的 DMARC 特定文本部分的第一个标签。 即使其他 DMARC 标签值不区分字母大小写,v= 标签的值必须是大写字母: DMARC1

示例:

_dmarc IN TXT “v=DMARC1;p=none”

p=

none

quarantine

reject

这是“策略”标签,必须作为 DMARC 记录中的第二个标签,紧接 v= 这个标签。

p=none 表示收件服务器基于 DMARC 查询结果不采取任何操作。 不得基于未通过 DMARC 检查这个失败隔离或拒收邮件。 不过可以出于其他理由隔离或拒收这些邮件,例如未通过垃圾邮件过滤测试或与 DMARC 无关的其他安全检查。 对于 p=none 的使用有时被称为“监控”或“监控模式”,因为您可以配合 rua= 这个标签一起使用来从收件域接收有关您邮件的综合报告,不过不会对未通过 DMARC 检查的这些邮件执行任何惩罚性操作。 您可以一直使用这个策略,直到您彻底测试了您的 DMARC 实施,并确保您已准备好使用更具有限制性的 p=quarantine 策略。

p=quarantine 这个策略用于以下场景:在邮件的“From:” 报头声称由您所发送但未通过 DMARC 检查时,您希望其他邮件服务器将该邮件视为可疑邮件。 取决于服务器的本地策略,这可以表示对邮件进行额外审核、将其放入收件人的垃圾邮件文件夹、将其路由到不同的服务器或采取其他操作。

p=reject 表示您希望收件服务器拒收未通过 DMARC 验证的任何邮件。 不过一些服务器仍然接收这些邮件,不过将其隔离或进行额外审核。
这是限制性最高的策略,通常不使用该策略,除非您对自己的邮件策略、以及您允许账户使用的邮件或服务类型把握十足。
例如,如果您允许您的用户加入第三方邮件列表,使用邮件转发服务,并使用网站上的“共享”功能,使用
p=reject 将可能导致一些合法邮件被拒收。 而且该设置也会使某些用户被一些邮件列表删除或阻止。

示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;rua=mailto:dmarc-report@example.net”

额外标签

以下列出的所有标签都是可选标签。 如果未在记录中使用任何这些标签,则假定其默认值。

标签

备注

sp=

none

quarantine

reject

默认值:

如果未使用 sp=,则对域和子域应用 p= 这个标签。

此标签用来指定应用 DMAR 记录的域的子域将使用的策略。 例如,如果应用于 example.com 的记录中使用了这个标签,那么会将 p= 这个标签中指定的策略应用于来自 example.com 的邮件,将 sp= 这个标签中指定的策略应用于来自 example.com 子域的邮件,例如 mail.example.com。如果在记录中忽略了这个标签,则将 p= 这个标签应用于该域及其子域。

示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;sp=reject”

rua=

由逗号分隔的将接收 DMARC 综合报告的邮件地址列表 必须使用以下格式输入作为 URI 的 地址:
mailto:user@example.com

默认值: none

如果未使用这个标签,则不发送综合报告。

此标签表示您希望从接收了一封“From:” 声称来自您所在域邮件的收件服务器接收 DMARC 综合报告。 使用以下格式指定作为 URI 的一个或多个邮件地址: mailto:user@example.com,使用逗号分隔多个 URI。

示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;
rua=mailto:user01@example.com
,mailto:user02@example.com”

通常这些地址将位于此记录覆盖的域。 如果您希望将报告发送至其他域的地址,则该域的 DNS 区域文件必须也包含一个专用的 DMARC 记录,指示它将接收该域的 DMARC 报告。

example.com 的记录示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;
rua=mailto:non-local-user@example.net”

example.net 的记录:

example.com._report._dmarc TXT “v=DMARC1”

ruf=

由逗号分隔的将接收 DMARC 故障报告的邮件地址列表 必须使用以下格式输入作为 URI 的 地址:
mailto:user@example.com

默认值: none

如果未使用这个标签,则不发送故障报告。

此标签表示您希望从接收了一封“From:” 声称来自您所在域邮件的服务器接收 DMARC 故障报告,前提是满足了在 fo= 这个标签中指定的条件。 在默认情况下,如果未指定 fo= 这个标签,在邮件未通过所有 DMARC 验证检查时将发送故障报告(例如未通过 SPF 和 DKIM 验证)。 使用以下格式指定作为 URI 的一个或多个邮件地址: mailto:user@example.com,使用逗号分隔多个 URI。

示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;
ruf=mailto:dmarc-failures@example.com”

通常这些地址将位于此记录覆盖的域。 如果您希望将报告发送至其他域的地址,则该域的 DNS 区域文件必须也包含一个专用的 DMARC 记录,指示它将接收该域的 DMARC 报告。

example.com 的记录示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;
ruf=mailto:non-local-user@example.net”

example.net 的记录:

example.com._report._dmarc TXT “v=DMARC1”

要了解有关 DMARC 规范的更多扩展信息,请参阅: www.dmarc.org

创建记录

在 SPF 和 DKIM 就绪后,您就可以通过 TXT 记录的形式向您的网域的 DNS 记录添加策略,以配置 DMARC(就像对 SPF 或 ADSP 执行的操作一样)。

TXT 记录的名称应该是“_dmarc.your_domain.com.”,其中“your_domain.com”替换为您的实际域名。

下面是 DMARC TXT 记录中的常用标记:

标记名称 必填 用途 样例

v

必需 协议版本 v=DMARC1

p

必需 域的策略 p=quarantine

pct

可选 要过滤的邮件百分比 pct=20

rua

可选 汇总报告的报告 URI rua=mailto:aggrep@example.com

sp

可选 该域的子域的策略 sp=reject

aspf

可选 SPF 的匹配模式 aspf=r

有关其他可用标记,请参阅 DMARC 标记注册表

 

只有 v(版本)和 p(策略)标记是必需的。有三种策略设置(或邮件处置设置)可供选用:

  • – 不采取任何行动。仅在每日报告中记录受影响的邮件。
  • 隔离 – 将受影响的邮件标记为垃圾邮件。
  • 拒绝 – 在 SMTP 层撤销邮件。

匹配模式指发件人记录与 SPF 和 DKIM 签名相比的一致程度,有两个可能的值:宽松或严格,分别以“r”和“s”表示。简言之,“宽松”允许部分匹配(例如给定网域的子域),而“严格”要求完全匹配。

请务必在可选的 rua 标记中填入您的电子邮件地址,以接收每日报告。

下面是一些
DMARC TXT 记录示例 (_dmarc.your_domain.com IN
TXT),您略加修改即可使用。当然,要将“your_domain.com”和“postmaster@your_domain.com”替换为您的实际域名和电子邮件地址。

在以下 TXT 记录示例中,如果邮件声称从您的 domain.com 发送,但未能通过 DMARC 检查,系统将不采取操作。不过,所有这些邮件都会显示在发送到“postmaster@your_domain.com”的每日汇总报告中。

"v=DMARC1; p=none; rua=mailto:postmaster@your_domain.com"在下面的 TXT 记录示例中,如果邮件声称从您的 domain.com 发送,但未能通过 DMARC 检查,那么以5%的比例将其隔离。然后,系统会将每日汇总报告通过电子邮件发送到“postmaster@your_domain.com”。

"v=DMARC1; p=quarantine; pct=5; rua=mailto:postmaster@your_domain.com"在最后这个示例中,如果邮件声称从“your_domain.com”发送,但未能通过
DMARC 检查,那么系统将 100%
拒绝该邮件。然后,系统会将每日汇总报告通过电子邮件发送到“postmaster@your_domain.com”和“dmarc@your_domain.com”。

"v=DMARC1; p=reject; rua=mailto:postmaster@your_domain.com, mailto:dmarc@your_domain.com"

每日报告采用
XML 格式。阅读该报告可以更好地了解邮件流情况。此外,报告还可以帮助您确保对出站邮件源进行正确的身份验证。如果不同 IP
地址发送声称来自您网域的邮件,请确保这些 IP 地址确实合法,并使用 DKIM 对其进行正确配置,或将其添加到相应的 SPF
范围内。如果新的邮件源上线但管理员设置了拦截策略,或者现有邮件源的配置出现问题,此时报告还可以帮助管理员快速采取措施。

下面是一份报告的摘录,显示了从两个 IP 地址发送的邮件的结果,一封邮件为直接发送,另一封为转发。两封邮件均成功发送:

 <record>
 <row>
 <source_ip>207.126.144.129</source_ip>
 <count>1</count>
 <policy_evaluated>
 <disposition>none</disposition>
 </policy_evaluated>
 </row>
 <identities>
 <header_from>stefanomail.com</header_from>
 </identities>
 <auth_results>
 <dkim>
 <domain>stefanomail.com</domain>
 <result>pass</result>
 <human_result></human_result>
 </dkim>
 <spf>
 <domain>stefanomail.com</domain>
 <result>pass</result>
 </spf>
 </auth_results>
 </record>
 <record>
 <row>
 <source_ip>207.126.144.131</source_ip>
 <count>1</count>
 <policy_evaluated>
 <disposition>none</disposition>
 <reason>
 <type>forwarded</type>
 <comment></comment>
 </reason>
 </policy_evaluated>
 </row>
 <identities>
 <header_from>stefanomail.com</header_from>
 </identities>
 <auth_results>
 <dkim>
 <domain>stefanomail.com</domain>
 <result>pass</result>
 <human_result></human_result>
 </dkim>
 <spf>
 <domain>stefanomail.com</domain>
 <result>pass</result>
 </spf>
 </auth_results>
 </record> 

逐步部署

我们强烈建议您按照以下操作顺序应用策略,逐步增加 DMARC
的使用。首先,监控您的流量,并查找报告中的异常之处,例如仍没有签名或可能经过伪装的邮件。在您对结果感到满意之后,将 TXT
记录策略设置从“无”改为“隔离”。然后,再次查看结果,这次要检查垃圾邮件的捕获情况及每日 DMARC
报告。最后,在确信您的所有邮件都已签名之后,将策略设置改为“拒绝”,以充分利用 DMARC。重新查看报告,以确保结果如您所愿。

类似地,可选的
pct 标记也可以用来对 DMARC 进行分步部署和采样。因为默认值为 100%,所以,如果在 DMARC TXT
记录中采用“pct=20”,则系统只对所有受该策略影响的邮件中的五分之一(而不是全部)真正执行此操作。在您选择隔离和拒绝邮件时,此设置非常有用。在开始时设置一个较低的百分比,然后每隔几天逐步增加。

因此,比较慎重的完整部署过程应该像下面这样:

  1. 全部监控。
  2. 隔离 1%。
  3. 隔离 5%。
  4. 隔离 10%。
  5. 隔离 25%。
  6. 隔离 50%。
  7. 全部隔离。
  8. 拒绝 1%。
  9. 拒绝 5%。
  10. 拒绝 10%。
  11. 拒绝 25%。
  12. 拒绝 50%。
  13. 全部拒绝。

尝试尽快删除百分比,以完成整个部署。

请记得照常查看每日报告

Source: https://www.xiaoyu.net/1144.html

发表在 mail | dmarc已关闭评论

前端知识图谱

 

来源于群分享:

点击查看原图

发表在 technologys | 前端知识图谱已关闭评论