wukaiqiang 发布的文章

linux机器间建立信任关系
如何建立信任关系
在shell脚本中,需要使用scp命令将本地的文件复制到另一台机器中备份。但通常执行scp命令后都需要输入用户密码,这样在定时自动执行shell脚本中就不适用了。

在两台机器的两个用户之间建立安全的信任关系后,可实现执行scp命令时不需要输入用户密码。(该方法对ssh也适用) 以下将介绍如何在两台机器间建立信任关系,为了方便说明,我们将执行scp命令的机器叫做client,scp命令操作的远端机器叫做server。假设两个机器的账户都是work(其他账户也行,为了讨论方便假设了一个)。

1、在机器Client上work用户执行ssh-keygen命令,生成建立安全信任关系的证书。

[work@Client work]# ssh-keygen -b 2048 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/work/.ssh/id_rsa): <– 直接输入回车
Enter passphrase (empty for no passphrase): <– 直接输入回车
Enter same passphrase again: <– 直接输入回车
Your identification has been saved in /work/.ssh/id_rsa.
Your public key has been saved in /work/.ssh/id_rsa.pub.
The key fingerprint is:
49:9c:8a:8f:bc:19:5e:8c:c0:10:d3:15:60:a3:32:1c root@A
[work@Server work]#

注意:在程序提示输入passphrase时直接输入回车,表示无证书密码。

上述命令将生成私钥证书id_rsa和公钥证书id_rsa.pub,存放在用户根目录的.ssh子目录中。

2、将公钥证书id_rsa.pub复制到机器Server的work根目录的.ssh子目录中,同时将文件名更换为authorized_keys。

[work@Client work]# scp -p .ssh/id_rsa.pub work@192.168.3.206:/work/.ssh/authorized_keys
work@192.168.3.206′s password: <– 输入机器Server的work用户密码
id_rsa.pub 100% || 218 00:00
[work@Client work]#

执行完上面两步后,就在机器Client的work和机器Server的work之间建立安全信任关系。下面我们看看效果:
[work@Client work]# scp -p text work@192.168.3.206:/work
text 100% || 19 00:00 //这时不需要输入密码了
[work@Client work]#

同一台机器上面scp也需要设立信任关系。。。囧

已经存在的key,直接cat .ssh/id_rsa.pub >>.ssh/authorized_keys ,就搞定啦~~~

无法建立信任关系时排错步骤
1.AB主机名是默认的Localhost,如果AB之间的主机名相同,可能会导致无法成功。要修改主机名用hostname 命令,修改/etc/sysconfig/network,then restart your server.

2.查看SSH配置文件/etc/ssh/ssh_config,找到IdentityFile所指定的文件是什么,有的不是默认的id_rsa,这里指定的文件要和第一部分生成的文件名要相同,这里是id_rsa.

3.查看B机authorized-keys的文件权限是否为600或者644 (linux文件权限详解),如直接在server机器上vi或touch建立文件authorized_keys,可能会导致信任关系无法建立。

4.查看/var/log/secure日志,里面应该有一些蛛丝马迹可以供你参考

当身体开始抱怨你的时候,一切都已经出现问题了,不论是工作还是家庭。所以改变的第一步进行身体调整。然后才是其他。之所以有这样的感慨,是因为某天早上起来,一阵头晕眼花,想吐,立马给同事发信息,早上身体不适,要晚点上班,然后在出租屋躺了1个小时,才去上班,出门前看了一下体重,重了5公斤,整个人都不好了,整天没吃饭,到了晚上才俄,吃饱了后面再去深业上城去逛了下,没有衣服穿了,但是每件一份都不合适。
以后的每天都开始准点睡觉,合理饮食,坚持锻炼。

主从同步报错:column 0 of talbe 'XXX' cannot be converted from type 'varchar(120(bytes))' to type 'varchar(160(bytes)) utf8mb4
检查发现主库字符集是utf8,从库字符集是utf8mb4,因为从库采用逻辑恢复,创建数据库时指定的字符集类型错误导致。

一、概述

spool是oracle的命令工具,主要用于记录执行脚本日志。

二、常用方法

set echo off ;#关闭脚本中的sql命令,默认为on
set pagesize 0;#设置每页行数,默认24,为0表示不分页
set termout off; #显示脚本执行结果,默认为on
set feedback off; #回显本次sql命令处理的记录条数,默认为on
set heading off; 输出域标题,默认为on
。。。。。。

spool tableinfo.log
select * from XXx;
spool off

Oracle中的character set 和 national character set
character set varchar,我们常说的数据库的字符集
查看方式:

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')

----------------------------------------------------

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

 

SQL>select userenv(‘language’) from dual;

AMERICAN _ AMERICA. ZHS16GBK

查询oracle client端的字符集

在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,

比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK

这样就只影响这个窗口里面的环境变量。

在unix平台下,就是环境变量NLS_LANG。

$echo $NLS_LANG

AMERICAN_AMERICA.ZHS16GBK

(1).数据库服务器字符集

select * from nls_database_parameters

来源于props$,是表示数据库的字符集。

(2).客户端字符集环境

select * from nls_instance_parameters

其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

(3).会话字符集环境

select * from nls_session_parameters

来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

(4).客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。

如果多个设置存在的时候,NLS作用优先级别:Sql function > alter session > 环境变量或注册表> 参数文件> 数据库默认参数

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

表示nvchar 的编码方式 national character set,默认utf8-16或32

注意:
注意,如果包含SQL文件的字符集是ANSI,操作界面选用gb2313,如果字符集是UTF-8,选择用UTF-8字符集