utf-8有bom的坑

工作中是在window下开发,linux下发布
遇到的utf有bom的坑有两次:
第一次是php项目上测试环境,上去后还没问题,修改了配置文件后,打不开见面,找代码问题和环境问题,都没找到,后来突然有同事说是bom问题,一查,当时修改config文件的时候,是有其他同事使用window的记事本修改过.
第二次是本地自己搭建的wnmp环境,nginx启动不了,提示信息中带有乱码的描述.在对比几次nginx的配置后,发现没问题,这时猛然想到之前遇到的bom问题,使用notopad++修改文件为无bom后,重启,问题解决.

总结:
UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支持UTF-16,UTF-32才加上.
BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器.

平时积累的一些实用创新项目和实用创新软件/工具归总(持续更新)

  1. 专业只做评论:友言,畅言,多说
  2. 专业只做分享:jiathis,百度分享
  3. ThinkSDK:http://www.thinkphp.cn/extend/292.html
  4. 叮当dingdone
  5. gitblit java环境下的
  6. 移动易开源
  7. ITDB:IT资产管理软件
  8. 文字图片http://www.yamibo.com/thread-250542-1-1.html
  9. 在线脑图,百度脑图:http://naotu.baidu.com
    10.softehter,PacketiX vpn工具
    11.http://720yun.com/client
    12.https://docs.smartping.org/install/config.html 开源ping管理
    13.serv-U:ftp服务端管理工具
    14.lanhuapp.com
    15.消息推送:http://xg.qq.com/
    16.网盘搜索:https://www.panc.cc/
    17.bt搜索:https://www.btrabbit.tv,btkitty.org
    18.后台管理静态框架:adminlte
    19.接口在线管理文档:rap,smartwiki
    20.反代:https://www.fikker.com/index.htm
    21.https://modao.cc/ ,lanhuapp.com
    22.美国信用卡信息
    23.国外短信验证码:https://baijiahao.baidu.com/s?id=1592440244386886559&wfr=spider&for=pc
    https://smsreceivefree.com/country/usa
    24.国产服务器监控开源:91monitor
    25.在线修改大表结构:pt-online-schema-change
    26.ssl证书:https://certbot.eff.org/lets-encrypt/centosrhel7-nginx

使用openssl生成rsa的公钥和私钥

1.安装openssl
$yum list openssl  #查看是否有可用包,顺便也能查看是否安装
$yum -y install openssl #安装openssl

2.生成私钥(大小为1024位).
$openssl #打开软件
openssl>genrsa -out rsa_private_key.pem 1024 #在当前目录生成大小为1024的私钥文件rsa_private_key.pem

3.使用PKCS8填充私钥
openssl>pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt #生成填充后的数据,如果成功,会在当前窗口打印一串字符
注:并不会覆盖之前生成的私钥文件

4.生成公钥
openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem #依据当前目录下的私钥文件,生成公钥

注意:
A在openssl>输入模式下,无删除和回退,打错字符后,按Ctrl+C退出后,重新输入,当然,可以使用鼠标粘贴复制命令
B生成的私钥和公钥,—–BEGIN PUBLIC KEY—–开头,—–END PUBLIC KEY—–结尾,这种形式,实际的密钥在这里面包括(并不包括这两种字符).
C在某些情况下,使用时也是需要粘贴—–BEGIN PUBLIC KEY—–,—–END PUBLIC KEY—–这两组字符,还是依据填入信息时的说明吧

数据来源:http://blog.csdn.net/scape1989/article/details/18959657

linux的用户管理

常规使用:
useradd #添加用户命令
groupadd #添加组命令
usermod #用户属性修改命令
passwd #密码命令
/etc/passwd 和/etc/shadow #用户的密码文件

一:新建用户和用户组:useradd和groupadd
1,useradd的参数:
-u:指定UID标记号
-d:指定宿主目录,缺省为/home/用户名
-e:指定账号失效时间(下面usermod也有此选项)
-g:指定所属的基本组(组名或GID)
-G:指定所属的附加组(组名或GID)
-M:不为用户建立并初始化宿主目录、
-s:指定用户的登录shell(默认为/bin/bash,一般不用改,在建立非登录用户的时候可以指定
为/sbin/nologin)
注:这些参数都能分开用,不冲突的可以在建立用户的时候连着用。
示例1:添加用户stu01,指定UID为520,宿主目录为/public/stu01,指定基本组为users(注:系统中本身就
存在users这个组GID为100),附加组为tech:
[root@localhost ~]# useradd -u 520 -d /public/stu04 -g users-G tech stu01
[root@localhost ~]# id stu01
uid=520(stu01) gid=100(users) groups=100(users),200(tech)
示例2:添加用户stu02,不为用户建立宿主目录:
[root@localhost ~]# useradd -M -s /sbin/nologin stu02 //创建一个非登录用户stu02
[root@localhost ~]# cat /etc/passwd | grep stu02
stu02:x:1001:1001::/home/stu02:/sbin/nologin //-s参数指定bash shell
2,groupadd的参数:
gourpadd [-g GID] 组名
-g参数指定了新建用户组的GID
[root@localhost ~]# groupadd -g 600 stu //添加一个组stu,指定其GID为600
[root@localhost ~]# cat /etc/group | grep stu //查看stu组的信息
stu:x:600:

二:删除用户和用户组
1,userdel
-格式:userdel [-r] 用户名
添加-r选项,宿主目录/用户邮件也一并删除
示例:
[root@localhost~]# useradd user1;useradd user2 //添加用户user1和user2
[root@localhost~]# ll -d /home/user1/ /var/mail/user1 /home/user2/ /var/mail/user2 //查看user1、user2的宿主目录和邮件文件是否存在
drwx—— 3 user1 user1 4096 02-1809:53 /home/user1/
drwx—— 3 user2 user2 4096 02-1809:53 /home/user2/
-rw-rw—- 1 user1 mail 0 02-18 09:53 /var/mail/user1
-rw-rw—- 1 user2 mail 0 02-18 09:53 /var/mail/user2
[root@localhost~]# userdel user1 ; userdel -r user2 //加不加-r的区别
[root@localhost~]# ll -d /home/user1/ /var/mail/user1 /home/user2/ /var/mail/user2
ls:/home/user2/: 没有那个文件或目录//加-r之后删除宿主目录
ls:/var/mail/user2: 没有那个文件或目录//加-r之后删除邮件文件
drwx—— 3 1002 1002 4096 02-1809:53 /home/user1/
-rw-rw—- 1 1002 mail 0 02-18 09:53 /var/mail/user1
[root@localhost~]#
2,groupdel:删除用户组
-格式:groupdel组名
-删除的目标组不能是用户的基本组。
-在删除用户组的时候,如果该组为某个成员的私有组,则无法删除,必须先删除组里面的成员,才能成功删除该组。
[root@localhost~]# id user1 //查看user1的基本组和附加组
uid=1002(user1) gid=1002(user1) groups=1002(user1),600(stu)
[root@localhost ~]# grep stu /etc/group
stu:x:600:user1,user2
上面的操作可以看到,user1的基本组为user1,附加组为stu,那么现在只能删除stu,而不能直接删除组user1,因为user1组是一个基本组,要想删除user1,必须先删除user1用户,再删除user1组,而stu组不是一个基本组,只是user1和user2的附加组,所以可以直接删除。
[root@localhost~]# groupdel user1 //尝试删除user1用户组,因为user1组为user1的基本组,所以需要先删除user1用户,才能删除user1组。
groupdel:不能删除用户的主组。
[root@localhost~]# groupdel stu
[root@localhost~]# grep stu /etc/group //删除stu组之后,不能看到/etc/group文件里面的stu组的信息了。

三:为用户和用户组添加密码
1,为用户添加密码:
Passwd命令:
选项有:
-d :清空用户的密码,使之无需密码即可登录
-l :锁定用户账号
-S :查看用户账号的状态(是否被锁定)
-u :解锁用户账号
– – stdin:标准输入(比如管道)取密码
注:删除密码用passwd –d 而不能用echo “” | passwd – -stdin 用户名
示例:
[root@localhosthome]# cat /etc/shadow| grep user3 //查看user3是否有密码
user3:$1$4vGPvNrT$xrFPE9XQhl.w1jchu10wo/:16119:0:99999:7:::
[root@localhosthome]# passwd -d user3 //使用-d选项删除密码
Removing passwordfor user user3.
passwd: Success
[root@localhosthome]# cat /etc/shadow| grep user3 //再次查看,密码取消
user3::16119:0:99999:7:::
[root@localhosthome]#
示例:
如果修改一个用户的密码,可以直接输入passwd 用户名,然后进入交互式的密码输入去人,使用- -stdin使用非交互式设置密码,直接将密码导入。
[root@localhost/]# echo “123” | passwd –stdin user3 //设置user3的密码为123,使用–stdin为面交互式导入密码
Changing password for user user3.
passwd: all authentication tokensupdated successfully.
[root@localhost/]# passwd -l user3 //锁定user3账户
Locking password for user user3.
passwd: Success
[root@localhost/]# grep user3 /etc/shadow //查看锁定账户密码信息,有两个“!”
user3:!!$1$4vGPvNrT$xrFPE9XQhl.w1jchu10wo/:16119:0:99999:7:::
[root@localhost/]# passwd -S user3 //用-S查看是否被锁定
user3 LK 2014-02-18 0 99999 7 -1(Password locked.)
[root@localhost/]# passwd -u user3 //-u参数为解锁
Unlocking password for user user3.
passwd: Success.
[root@localhost/]# grep user3 /etc/shadow //解锁之后,该账户密码段没有“!”
user3:$1$4vGPvNrT$xrFPE9XQhl.w1jchu10wo/:16119:0:99999:7:::
[root@localhost/]#
2,用户组的密码gpasswd
gpasswd 组名:进入交互式的密码输入确认。
gpasswd –r 组名:-r选项为移除密码,gpasswd –r 组名为清空该组密码
组密码的用途:主要是一些用户想要加入组,那么需要用到的这个组账户的密码,而这个用户加入的时候也是临时加入的,用exit即可退出该组。
四:用户组成员的添加和删除
1,gpasswd在用户组中的应用
-A :定义组管理员列表(可以在/etc/gshadow文件里查看组管理员和组成员)
-a :添加组成员,每次只能加一个
-d :删除组成员,每次只能删一个
-M :定义组成员列表,可设置多个(为覆盖操作,在定义之后,之前组内用户将被删除;注意在写多个成员列表的时候,用逗号隔开)
示例:
[root@localhost ~]# grep user /etc/gshadow
user:!::
[root@localhost ~]# gpasswd -a user1 user //将账户user1加入到user组中
正在将用户“user1”加入到“user”组中
[root@localhost ~]# gpasswd -a user2 user //将user2加入到user组中
正在将用户“user2”加入到“user”组中
[root@localhost ~]# grep user /etc/gshadow | tail -1 //查看user用户组的成员
user:!::user1,user2
[root@localhost ~]# gpasswd -M stu01,stu02 user //-M参数覆盖添加多个用户
[root@localhost ~]# cat /etc/gshadow | tail -1 //再次查看,user1和user2被覆盖
user:!::stu01,stu02
[root@localhost ~]# gpasswd -d stu01 user //将stu01从user组中删除
正在将用户“stu01”从“user”组中删除
[root@localhost ~]# cat /etc/gshadow | tail -1
user:!::stu02 //删除后只剩下stu02用户
[root@localhost ~]# gpasswd -A stu02 user //将stu02设置为管理员
[root@localhost ~]# grep user /etc/gshadow | tail -1
user:!:stu02:stu02 //gshadow文件中,第三个字段为该组的管理员账户,为stu02
[root@localhost ~]#

2,usermod主要是对用户的属性进行更改,可以增加用户成员的所属附加组
只是用usermod的 -a-G选项(-a表示添加,-G指定组,-a -G为新加一个附加组)
命令:usermod -a -G 用户组 用户名
[root@localhost~]# usermod -a -G tech stu02 //为stu02增加一个附加组tech
[root@localhost~]# id stu02
uid=501(stu02) gid=1201(nsd)groups=1201(nsd),200(tech),1204(user)

五:用户和组属性的查看和修改
1,usermod :主要针对用户与组之间属性的更改
格式:usermod [选项](选项可以有多个)用户名
-l :更改用户账号的登录名称
-L :锁定用户账户(注:用usermod –L锁定一个账户的时候可以用passwd–u直接解锁,但是用passwd –l锁定的账户,用usermod–U解锁的时间,需要解锁两次,因为,passwd –l锁定的账户密码前面有两个!,而usermod –L锁定的账号密码前面有一个!,可以通过查看/etc/gshadow文件里面的密码段来验证。)
-U :解锁用户账户
-u、-d、-e、-g、-G、-s :与useradd相同
-a :和-G搭配使用为添加该用户的附加组(只是用-G的时候,为修改附加组)
示例:
usermod -e 20140630(或2014-06-30) user1 :为修改user1账户失效时间为20140630
但是在用chage -E 2014-06-30 user1的时候,不能用20140630
[root@localhost~]# cat /etc/shadow | grep user1
user1:!!:16119:0:99999:7:::
[root@localhost~]# usermod -e 20140630 user1 //修改user1的账户失效时间
[root@localhost~]# cat /etc/shadow | grep user1
user1:!!:16119:0:99999:7::16251:
[root@localhost~]# usermod -l user01 user1 //修改user1的登录名为user01
usermod:警告:/var/spool/mail/user1 不属于 user1
[root@localhost~]#

2,chage :主要针对用户的密码进行设定
-l :列出密码有效信息
-E :指定账户过期时间,YYYY-MM-DD
-I :指定当密码失效后多少天锁定账号
-m :指定密码的最小天数
-M :指定密码的最大天数
示例:
[root@localhost~]# chage -l user01 //查看user01的密码信息
最近一次密码修改时间:2月 18, 2014
密码过期时间:从不
密码失效时间:从不
帐户过期时间:从不
两次改变密码之间相距的最小天数:0
两次改变密码之间相距的最大天数:99999
在密码过期之前警告的天数:7
[root@localhost ~]# cat /etc/shadow | grep user01
user01:$1$609lnAxS$qk/Yzf4qd727R9Q2dieQ1.:16119:0:99999:7:::
[root@localhost ~]# chage -E 2014-07-10 user01 //修改user01的账户过期时间
[root@localhost ~]# chage -I 3 user01 //修改user01用户的密码失效3天后锁定
[root@localhost ~]# chage -m 10 user01 //密码修改之后10天内不准修改
[root@localhost ~]# chage -M 40 user01 //密码修改后40天之后必须再次修改密码
[root@localhost ~]# cat /etc/shadow | grep user01
user01:$1$609lnAxS$qk/Yzf4qd727R9Q2dieQ1.:16119:10:40:7:3:16261:
[root@localhost ~]# chage -l user01
最近一次密码修改时间:2月 18, 2014
密码过期时间:3月 30, 2014
密码失效时间:4月 02, 2014
帐户过期时间:7月 10, 2014
两次改变密码之间相距的最小天数:10
两次改变密码之间相距的最大天数:40
在密码过期之前警告的天数:7
[root@localhost ~]#

3,id
-在命令行输入id,为查看该账户的用户名及用户所属组等信息;
[root@localhost~]# su – frank
[frank@localhost~]$ id //id命令直接查看当前用户的ID和所属组
uid=507(frank) gid=507(frank)groups=507(frank)
-id 用户名 :表示查看该用户的相关信息
[root@localhost~]#id frank //查看frank用户的用户ID和所属组
uid=507(frank) gid=507(frank)groups=507(frank)
[root@localhost~]# id user01 //查看user01的用户ID和所属组
uid=1005(user01)gid=1005(user1) groups=1005(user1)
[root@localhost~]#
-id –gn :查看当前用户的所属组
[root@localhost~]# su – frank
[frank@localhost~]$ id -gn //查看当前所属组,为frank组,下面修改一下
frank
[frank@localhost~]$ exit
logout
[root@localhost~]# usermod -g tech frank //将frank的基本组修改为tech
[root@localhost~]# su – frank
[frank@localhost~]$ id -gn //用id -gn查看当前组
tech
[frank@localhost~]$

4,newgrp
newgrp 用户组 :为当前用户临时增加一个用户的附加组(可以用exit退出该附加组)
示例:
[root@localhost~]# su – frank
[frank@localhost~]$ id
uid=507(frank) gid=200(tech) groups=200(tech)
[frank@localhost~]$ newgrp user
密码: //这个密码为用gpasswd来设置的用户组密码,当有新用户加入是,需要输入,如果没有密码,直接确定即可加入
[frank@localhost~]$ id -gn
user //用户组为user,未修改之前为tech
[frank@localhost~]$ id
uid=507(frank) gid=1204(user) groups=200(tech),1204(user)
[frank@localhost~]$ exit //只是临时增加的附加组,可以用exit退出该组
exit
[frank@localhost~]$ id
uid=507(frank) gid=200(tech) groups=200(tech)
[frank@localhost~]$ id -gn
tech //退出后的用户组还未之前的tech
[frank@localhost~]$

5,groups :查看用户所属组
groups :查看当前用户的所属组(包括基本组和附加组)
groups 用户名 :查看该用户所属组(包括基本组和附加组,前面的为基本组)
注:也可以查看/etc/group和/etc/gshadow文件的第四段。
[root@localhost ~]# groups //查看当前用户的所属组
root bin daemon sys adm disk wheel
[root@localhost ~]# groups user2 //查看user2用户的所属组
user2 : user2 tech //那么user2用户的基本组为user2,有一个附加组,为tech
[root@localhost ~]#

六,附:用户和用户组的密码及新建用户宿主目录里面的隐藏文件
1,用户的密码 :/etc/passwd 和/etc/shadow

/etc/passwd文件:保存了用户账号的基本信息
[root@localhost~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
1 2 3 4 5 6 7
可以看到passwd里面的内容分为7个字段,分别用“:”隔开,每个字段的含义:
第一段:用户账号的名称
注:可使用user -l user1 user01修改
第二段:密码字符或占位符
注:加密后的密码保存在/etc/shadow文件中
第三段:用户账号的UID号
注: 在建立的时候用useradd -u来指定UID号
第四段:所属基本组的GID号
注:在新建用户的时候,如果不指定基本组,会默认新建一个和用户同名的组,可以使用useradd -g users/100来指定新建用户组的GID
第五段:用户全名
第六段:宿主目录
注:在新建用户的时间,用useradd -d来指定
第七段:登录shell程序的路径
注:在新建用户时候使用useradd -s来指定,也可以在后来使用usermod -s来指定

/etc/shadow文件:保存了密码字串,有效期等信息
[root@localhost/]# head -1 /etc/shadow
root:$1$SmlKPNho$qNqybQOGBSnK6iWmviI6b1:15908:0:99999:7:::
1 2 3 4 5 6789
第一段:用户账号的名称
第二段:加密后的密码字符串
注:在使用passwd -l锁定之后加两个”!”,用usermod -L锁定之后该字符串前面加一个”!”
第三段:上次修改密码的时间
第四段:密码的最短有效天数,默认为0
注:也就是在上次修改密码后多少天之内不准修改密码,可以使用chage -m来修改
第五段:密码的最长有效天数
注:也就是说,密码在到达有效天数之后,必须进行修改,可以使用chage -M修改
第六段:密码过期后的警告天数,默认为7
注:在密码最长有效天数的前7天进行提醒
第七段:密码过期后多少天禁用此账户,默认值为空
注:如果密码过期之后,也就是密码最长有效时间到了之后,用户还可以继续使用该账号,如果还不修改密码,那么,这个时间将起作用,该用户将被禁用。可以使用chage -I 来修改
第八段:账号失效时间,默认值为空
可以使用chage -E 或者usermod -e来修改账号的失效时间
例如:
[root@localhosthome]# chage -l user01
最近一次密码修改时间:2月 18, 2014
密码过期时间:3月 30, 2014
密码失效时间:4月 02, 2014
帐户过期时间:7月 10, 2014
两次改变密码之间相距的最小天数:10
两次改变密码之间相距的最大天数:40
在密码过期之前警告的天数:7
[root@localhost~]# cat /etc/shadow | grep user01
user01:$1$609lnAxS$qk/Yzf4qd727R9Q2dieQ1.:16119:10:40:7:3:16261:
[root@localhost~]# usermod -e 20140810 user01 //或chage -E 20140810 user01
[root@localhost~]# cat /etc/shadow | grep user01
user01:$1$609lnAxS$qk/Yzf4qd727R9Q2dieQ1.:16119:10:40:7:3:16292:
[root@localhost~]# chage -l user01
最近一次密码修改时间:2月 18, 2014
密码过期时间:3月 30, 2014
密码失效时间:4月 02, 2014
帐户过期时间:8月 10, 2014
两次改变密码之间相距的最小天数:10
两次改变密码之间相距的最大天数:40
在密码过期之前警告的天数:7
第九段:该字段保留

2,新建一个用户时候的默认配置/etc/login.defs、/etc/useradd和/etc/skel
[root@localhost~]# grep -vE “^#|^$” /etc/login.defs
MAIL_DIR /var/spool/mail //定义邮件文件路径
PASS_MAX_DAYS 99999 //定义密码最长有效天数,/etc/shadow第五段
PASS_MIN_DAYS 0 //密码最短有效天数为0,/etc/shadow的第四段
PASS_MIN_LEN 5 //密码最小长度为5,这里不起作用,有其他文件来规定
PASS_WARN_AGE 7 //密码过期后的警告天数
UID_MIN 500 //UID的起始值,/etc/passwd中的第三段
UID_MAX 60000 //UID的最大值,/etc/passwd中的第三段
GID_MIN 500 //GID的起始值,/etc/passwd中的第四段
GID_MAX 60000 //GID的最大值,/etc/passwd中的第四段
CREATE_HOME yes //是否创建宿主目录
UMASK 077 //umask值为077
USERGROUPS_ENAB yes //
MD5_CRYPT_ENAB yes //密码使用MD5加密
ENCRYPT_METHOD MD5 //
[root@localhost~]#cat /etc/default/useradd
# useradd defaults file
GROUP=100 //
HOME=/home //定义创建用户的宿主目录在/home下
INACTIVE=-1 //是否启用该账户,-1代表是
EXPIRE= //
SHELL=/bin/bash //指定新建用户的shell为/bin/bash
SKEL=/etc/skel //新建用户的宿主目录模板为/etc/skel
CREATE_MAIL_SPOOL=yes //是否创建用户的邮件文件

[root@localhost~]# ll -a /etc/skel/ //在新建一个用户的时候,宿主目录里面的内容就是将skel拷贝过去,然后放到/home目录下并改名为新建的用户名
总计 64
drwxr-xr-x 3 root root 4096 2013-07-10 .
drwxr-xr-x 97 root root 1228802-18 16:24 ..
-rw-r–r– 1 root root 33 2011-05-13 .bash_logout
-rw-r–r– 1 root root 176 2011-05-13 .bash_profile
-rw-r–r– 1 root root 124 2011-05-13 .bashrc
-rw-r–r– 1 root root 515 2011-04-07 .emacs
drwxr-xr-x 4 root root 4096 2012-11-16 .mozilla

3,全局配置文件~/.bash_profile、~/.bashrc和~/.bash_logout
注:可以在用户的宿主目录下使用ls -a查看。
~/.bash_profile:每次登录时执行
~/.bashrc :每次进入新的Bash环境时执行
~/.bash_logout:每次推出登录时执行

4,查看用户组信息:/etc/group和/etc/gpasswd
/etc/group查看用户组的信息
[root@localhost~]# cat /etc/group | tail -1
user:x:1204:user01,user2
第一段:组名
第二段:密码占位符
第三段:GID
第四段:组内成员(使用gpasswd -a添加,gpasswd -d删除,gpasswd -M覆盖添加多个)

[root@localhost~]# cat /etc/gshadow | tail -1
user:$1$u/W2qj.L$W8GJY5HxyLzphdtgLKpxW0:stu02:user01,user2
第一段:组名
第二段:密码(使用gpasswd来设置)
第三段:组管理员(使用gpasswd -A指定)
第四段:组内成员

文章出自:http://www.centoscn.com/CentOS/help/2014/0220/2416.html

Redis安装与使用

修改为外网可访问:
1.修改redis的配置文件,将所有bind信息全部屏蔽。
# bind 192.168.1.100 10.0.0.1
# bind 192.168.1.8
# bind 127.0.0.1
修改完成后,需要重新启动redis服务。

2.下面添加对特定端口开放的方法:
使用iptables开放如下端口
/sbin/iptables -I INPUT -p tcp –dport 6307 -j ACCEPT
保存
/etc/rc.d/init.d/iptables save
重启服务
service iptables restart
查看需要打开的端口是否生效?
/etc/init.d/iptables status

mysql使用keepalive实现HA(一)—主从master/slave部分

使用一主一从master/slave;

来源:http://ju.outofmemory.cn/entry/26073,http://blog.csdn.net/xuejiazhi/article/details/8941156

1.KeepAlived+Mysql

Mysql VIP :192.168.1.11

Master1:192.168.1.82

Master:192.168.1.83

OS 环境:Cent OS 6.5

Mysql版本:Mysql-community 5.7

2.安装mysql,略,如有需要参考:http://wp.tanguu.com/2016/01/06/remiepel-%E7%9A%84yum-%E6%BA%90%E5%AE%89%E8%A3%85/

3.修改my.cnf配置

在两台要进行备份的mysql服务器上的my.cnf文件进行配置如下(将下面的配置分别加入相关服务器的my.cnf):注意按原作者是这样设置log-bin=/var/log/mysql/mysql-bin.log(创建该文件并chown mysql.mysql),结果本人这样做的时候mysql启动不了的情况,最后修改成如下配置:

Master1(192.168.1.82)

Master(192.168.1.83)

#主标服务标识号,必需唯一

server-id = 1

#因为MYSQL是基于二进制的日志来做同步的,每个日志文件大小为 1G

log-bin=mysql-bin

#要同步的库名

binlog-do-db = test

#不记录日志的库,即不需要同步的库

binlog-ignore-db=mysql

#用从属服务器上的日志功能

log-slave-updates

#经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。

sync_binlog=1

# auto_increment,控制自增列AUTO_INCREMENT的行为,用于MASTER-MASTER之间的复制,防止出现重复值,auto_increment_increment=n有多少台服务器,n 就设置为多少,auto_increment_offset=1设置步长,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID

auto_increment_offset=1

auto_increment_increment=2

#进行镜像处理的数据库

replicate-do-db = test

#不进行镜像处理的数据库

replicate-ignore-db= mysql

#主标服务标识号,必需唯一

server-id = 2

#因为MYSQL是基于二进制的日志来做同步的,每个日志文件大小为 1G

log-bin=mysql-bin

#要同步的库名

binlog-do-db = test

#不记录日志的库,即不需要同步的库

binlog-ignore-db=mysql

#用从属服务器上的日志功能

log-slave-updates

#经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同#步)。n=1是最安全的做法,但效率最低。默认设置是n=0。

sync_binlog=1

# auto_increment,控制自增列AUTO_INCREMENT的行为用于MASTER-MASTER之间的复制,防止出现重复值,auto_increment_increment=n有多少台服务器,n 就设置为多少,auto_increment_offset=2设置步长,这里设置为2,这样Master的auto_increment字段产生的数值是:2, 4, 6, 8, …等奇数ID

auto_increment_offset=2

auto_increment_increment=2

#进行镜像处理的数据库

replicate-do-db = test

#不进行镜像处理的数据库

replicate-ignore-db= mysql

4.查看配置情况:

mysql> show master status;#主

mysql> show master status;#从

5.创建同步帐户

GRANT REPLICATION SLAVE ON *.* TO ‘slave’@’%’ IDENTIFIED BY ‘Tangzhq_88’;#主

mysql> FLUSH PRIVILEGES;   //刷新相关权限表

GRANT REPLICATION SLAVE ON *.* TO ‘slave’@’%’ IDENTIFIED BY ‘Tangzhq_88’;#从

mysql> FLUSH PRIVILEGES;   //刷新相关权限表

注:会遇到密码强度的问题,修改密码为高强度:大小写,数字特殊字符;还会遇到让修改root密码的,修改即是1

6.同步设置

Master1(192.168.1.82)上操作如下:

mysql> stop slave;  //停止slave

mysql> change master to master_host=’192.168.1.83′, master_user=’slave’, master_password=’Tangzhq$0810′, master_log_file=’mysql-bin.000001′, master_log_pos=849; //修改当前的Master的值,因为是互为备份,所以Master1(192.168.1.82)的master为Master2(192.168.1.83),Master2设置复制的用户名为slave,密码是Tangzhq$0810,上面通过 show master status我们得知,log_file是mysql-bin.000001,postion是849。

mysql>start slave;    //开始salve,开始同步

mysql>show slave status;   //检测slave状态,如果Slave_IO_Running: Yes    Slave_SQL_Running: Yes    Seconds_Behind_Master: 0就OK了

 

Master2(192.168.1.83)上面操作如下:

mysql> stop slave;  //停止slave

mysql>change master to master_host=’192.168.1.82′, master_user=’slave’, master_password=’Tangzhq$0810′, master_log_file=’mysql-bin.000004′, master_log_pos=1098; //修改当前的Master的值,因为是互为备份,所以Master2(192.168.1.83)的master为Master2(192.168.1.82),Master1设置复制的用户名为slave,密码是Tangzhq_88,上面通过 show master status我们得知,log_file是mysql-bin.000004,postion是1098。

mysql>start slave;    //开始salve,开始同步

mysql>show slave status;  //检测slave状态,如果Slave_IO_Running: Yes    Slave_SQL_Running: Yes    Seconds_Behind_Master: 0就OK了

7.测试

在192.168.1.82上创建test库:create database test;#发现192.168.1.83自动创建了此库;

在192.168.1.82上test库上创建表:create table test(id int);#发现192.168.1.83自动创建了此表;

请看下篇–>mysql使用keepalive实现HA(二)—keepalive部分