mysql、systemd、ftp总结

1 mysql 主从同步



################## master################33


1.prividage


grant 权限  on 数据库对象 to 用户

eg: grant slect ,insert on 数据库.表 on '用户'@'ip' indentified by '密码';


从库的权限

扫描二维码关注公众号,回复: 84849 查看本文章

grant REPLICATION slave,super on *.* to '姓名'@'ip' indentified by '密码';



2. 配置文件


[mysqld]


server-id=1

#这是数据库ID,此ID是唯一的,主库默认为1,

#其他从库以此ID进行递增,ID值不能重复,否则会同步出错;

#一般取IP最后一段

log-bin=mysql-bi

#二进制日志文件,此项为必填项,否则不能同步数据;

binlog-do-db = testcreate 

#需要同步的数据库,如果需要同步多个数据库;

#则继续添加此项。

#binlog-do-db = testcreate1

#binlog-do-db = testcreate2

#binlog-ignore-db = mysql 

#不需要同步的数据库;


log_bin_trust_function_creators=TRUE

#若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步

3.重启


【window】.

net start/stop mysql

【linux】

service mysqld restart


################### 从库#############################




    

server-id = 2#Master 与Slave的不能相同


master-host = 192.168.1.101#指定MASTER地址

master-user = replication#同步用户名

master-password = 123456#同步密码

master-port = 3306#同步端口

master-connect-retry=60#断开重新连接等待时间


replicate-ignore-db=mysql#屏蔽需要同步数据库

replicate-do-db= skydb#同步数据库


relay-log=slave-relay-bin#生成日志文件

expire-logs-days = 7 #检测删除15天以前的日志



命令:

(修改从库的主库信息)

$:CHANGE MASTER 

TO MASTER_HOST='192.168.35.129',

MASTER_USER='fxl',

MASTER_PASSWORD='123',

MASTER_LOG_FILE='mater-bin.000001',

MASTER_LOG_POS=0;


$:start slave


从库挂掉:处理(slave_sql_running:no)

1.

    $:stop slave

2.

    处理问题

3.

    $:CHANGE MASTER 

    TO MASTER_HOST='192.168.35.129',

    MASTER_USER='fxl',

    MASTER_PASSWORD='123',

    MASTER_LOG_FILE='mater-bin.000001',

    MASTER_LOG_POS=上一次的执行点《一般都是没有执行的地方》;

4.$:start slave


systemd的unit


Requires: 这个单元启动了,那么它「需要」的单元也会被启动; 它「需要」的单元被停止了,它自己也活不了。但是请注意,这个设定并不能控制某单元与它「需要」的单元的启动顺序(启动顺序是另外控制的),即 Systemd 不是先启动 Requires 再启动本单元,而是在本单元被激活时,并行启动两者。于是会产生争分夺秒的问题,如果 Requires 先启动成功,那么皆大欢喜; 如果 Requires 启动得慢,那本单元就会失败(Systemd 没有自动重试)。所以为了系统的健壮性,不建议使用这个标记,而建议使用 Wants 标记。可以使用多个 Requires。

RequiresOverridable:跟 Requires 很像。但是如果这条服务是由用户手动启动的,那么 RequiresOverridable 后面的服务即使启动不成功也不报错。跟 Requires 比增加了一定容错性,但是你要确定你的服务是有等待功能的。另外,如果不由用户手动启动而是随系统开机启动,那么依然会有 Requires 面临的问题。

Requisite:强势版本的 Requires。要是这里需要的服务启动不成功,那本单元文件不管能不能检测等不能等待都立刻就会失败。

Wants:推荐使用。本单元启动了,它「想要」的单元也会被启动。但是启动不成功,对本单元没有影响。

Conflicts:一个单元的启动会停止与它「冲突」的单元,反之亦然。注意这里和后面的启动顺序是「正交」的:

两个相互冲突的单元被同时启动,要么两个都启动不了(两者都是第三个单元的 Requires),要么启动一个(有一个是第三个单元的 Requires,另一个不是),不是 Requires 的那个会被停止。要是两者都不是任何一个单元的 Requires,那么 Conflicts 别的那个单元优先启动,被 Conflicts 的后启动,要是互相写了,那么两个都启动不了。


OnFailure:很明显,如果本单元失败了,那么启动什么单元作为折衷。

好了,现在我们来想象一下,我们的单元(Ipv6 隧道)应该想要什么呢?很显然是一个连通着的网络。有一个 Systemd 默认提供的对象叫做 network-online.target(默认的 target 列表可见 systemd.special,必看,因为你大多数时候 Wants 的都是一个固定的系统状态而不是其它 systemd 服务),正正好好能够提供我们需要的环境。于是:


[Unit]

Description=Daemon to start He.net IPv6

Wants=network-online.target

下面我们需要定义一下服务启动顺序,不然连 / 目录所在的硬盘都没挂载就开始干活,上哪儿找程序去呀。Systemd 服务启动顺序主要使用以下两个标记定义的:


Before/After:要是一个服务 Before 另一个服务,那么在并行启动时(Systemd 总是用进程 0 并行启动所有东西,然后通过这两个标记来二次等待排序),那另一个服务这时就会等这个服务先启动并返回状态,注意是先启动而不是启动成功,因为失败也是一种状态,一定要成功才启动另一个服务是通过依赖关系定义的。反之 After 亦然。

下面说下“关机”(可以是挂起,这时候有些服务是依然在跑的,比如网络唤醒)时候的顺序:如果两个服务都是要关掉的,Before 是先关自己,After 是先关别人,这很好理解; 但如果一个服务是要关,而另一个是要开的,那么不管 Before/After 写了什么,总是优先关闭而不是开始。也就是比如服务 A Before 服务 B,但是服务 B 是在关,而服务 A 是在 restart,那么服务 B 的顺序在服务 A 的前面。


好啦,我们的单元应该在什么的前后启动呢?它不需要一定在什么服务前面跑起来,这不像 ifup 和 dhcp,网络起不来获取 ip 肯定没用。我们只需要有网就可以了。「有网」在 Systemd 中也是由一个默认 target:network.target 提供的,于是我们的控制单元就定义好了:


[Unit]

Description=Daemon to start He.net IPv6

Wants=network-online.target

After=network.target

定义服务本体 [service]


在定义完了 Systemd 用来识别服务的单元后,我们来定义服务本体,依然是声明:


[Service]

然后是声明服务类型:


[Service]

Type=

Systemd 支持的服务类型有以下几类:


simple 默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切皆休。这在图形界面里非常好理解,我打开 Amarok,退出它就没有了。但是命令行的大部分程序都不会那么设计,因为命令行的一个最基本原则就是一个好的程序不能独占命令行窗口。所以输入命令,回车,接着马上返回给你提示符,但程序已经执行了。所以只有少数程序比如 python xxx.py 还使用这种方式。在这种类型下面,如果你的主程序是要响应其它程序的,那么你的通信频道应该在启动本服务前就设好(套接字等),因此这种类型的服务,Systemd 运行它后会立刻就运行下面的服务(需要它的服务),这时没有套接字后面的服务会失败,写 After 也没用,因为 simple 类型不存在主进程退出的情况也就不存在有返回状态的情况,所以它一旦启动就认为是成功的,除非没起来。

forking 标准 Unix Daemon 使用的启动方式。启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程。你要是使用的这种方式,最好也指定下 PIDFILE=,不要让 Systemd 去猜,非要猜也可以,把 GuessMainPID 设为 yes。

判断是 forking 还是 simple 类型非常简单,命令行里运行下你的程序,持续占用命令行要按 Ctrl + C 才可以的,就不会是 forking 类型。


创建 PIDFILE 是你为它写服务的程序的任务而不是 Systemd 的功能,甚至也不是 Sysvinit 脚本的功能。参考 startproc创建pid file的问题了解进一步的知识。因此如果你的程序确实是 forking 类型,但就是没实现创建 PIDFILE 的功能,那么建议使用 ExecStartPost= 结合 shell 命令来手动抓取进程编号并写到 /var/run/xxx.pid。


oneshot 顾名思义,打一枪换一个地方。所以这种服务类型就是启动,完成,没进程了。常见比如你设置网络,ifup eth0 up,就是一次性的,不存在 ifup 的子进程(forking 那样),也不存在主进程(simple 那样),它运行完成后便了无痕迹。因为这类服务运行完就没进程了,我们经常会需要 RemainAfterExit=yes。后面配置的意思是说,即使没进程了,我们也要 Systemd 认为该服务是存在并成功了的。所以如果你有一个这样的服务,服务启动后,你再去 ifup eth0 up,这时你再看服务,依然显示是 running 的。因为只要在执行那条一次性命令的时候没出错,那么它就永远认为它是成功并一直存在的,直到你关闭服务。

dbus 这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName= 一起用。只有它成功获得了 DBus 空间,依赖它的程序才会被启动。

一般人也就能用到上面四个,还有两种少见的类型:


notify 这个程序在启动完成后会通过 sd_notify 发送一个通知消息。所以还需要配合 NotifyAccess 来让 Systemd 接收消息,后者有三个级别:none,所有消息都忽略掉; main,只接受我们程序的主进程发过去的消息; all,我们程序的所有进程发过去的消息都算。NotifyAccess 要是不写的话默认是 main。

idle 这个程序要等它里面调度的全部其它东西都跑完才会跑它自己。比如你 ExecStart 的是个 shell 脚本,里面可能跑了一些别的东西,如果不这样的话,那很可能别的东西的控制台输出里会多一个「启动成功」这样的 Systemd 消息。

由于 He.net 的 IPv6 是用 iproute2 的 ip 命令来弄的,所以是一个 oneshot 一次性服务。


[Service]

Type=oneshot

RemainAfterExit=yes

接下来要设置 ExecStart, ExecStop。如果程序支持的话,你还可以去设置 ExecReload,Restart 等。注意,这里设置的是它们 Reload/Restart 的方式,但并不代表没有它们 Systemd 就不能完成比如 systemctl restart xxx.service 这样的任务,程序有支持自然最好,程序不支持那就先 stop 再 start 咯。同样有特殊要求的时候你也可以去设置比如 ExecStartPre/ExecStartPost,RestartSec,TimeoutSec 等其它东西,参考链接里都有使用方法。


这里要特殊讲一下 ExecStart:


如果你服务的类型不是 oneshot,那么它只可以接受一个命令,参数不限,比如你先 ip tunnel create 再 ip tunnel0 up,那是两个 ip 命令,如果你不是 oneshot 类型这样是不行的。

如果有多条命令(oneshot 类型),命令之间以分号 ; 分隔,跨行可用反斜杠 \。

除非你的服务类型是 forking,否则你在这里输入的命令都会被认为是主进程,不管它是不是。

于是我们的 [Service] 就写好了:


 [Service]

 Type=oneshot

 RemainAfterExit=yes

 ExecStart=/usr/sbin/ip tunnel add he-ipv6 mode sit remote 66.220.18.42 local 108.170.7.158     ttl 255 ; \

           /usr/sbin/ip link set he-ipv6 up ; \

           /usr/sbin/ip addr add 2001:470:c:1184::2/64 dev he-ipv6 ; \

           /usr/sbin/ip route add ::/0 dev he-ipv6 ; \

           /usr/sbin/ip -6 addr

 ExecStop=/usr/sbin/ip route delete ::/0 dev he-ipv6 ; \

          /usr/sbin/ip -6 addr del 2001:470:c:1184::2/64 dev he-ipv6 ; \

          /usr/sbin/ip link set he-ipv6 down ; \

          /usr/sbin/ip tunnel del he-ipv6

安装服务 [install]


这可能有点绕,我服务文件都弄好了,放到 /etc/systemd/system(供系统管理员和用户使用),/usr/lib/systemd/system(供发行版打包者使用)了,不就是安装好了嘛。


这里说的是一种内部状态,默认你放对位置它显示的是 disabled,unloaded,所以我们要在 Systemd 内部对它进行一下 load,没人要的东西是不需要安装的(我们不收渣渣),所以我们要告诉 Systemd 它是有人要的,被谁要。一般都是被


[Install]

WantedBy=multi-user.target 

要(multi-user.target 表示多用户系统好了,简单理解就是你可以登入了)。这样在 multi-user.target 启用时,我们的服务也就会被启用了。


[Install] 部分下除了 WantedBy 还有两种属性,分别是:


Alias= 给你自己的别名,这样 systemctl command xxx.service 的时候就可以不输入完整的单元名称。比如你给 NetworkManager 一个别名叫 Alias=nm,那你就可以 systemctl status nm.service 查看实际是 NetworkManager.service 的服务了。

Also= 安装本服务的时候还要安装别的什么服务。比如我们的 He.net 脚本按理应该需要一个 iproute2.service 作为 also,但是 iproute2 实际上不需要 systemd 控制,所以就没写。它和 [Unit] 定义里面的依赖关系相比,它管理的不是运行时依赖,而是安装时。安装好了之后启动谁先谁后,谁依赖谁,和 Also= 都没有关系。

mysql的systemd脚本

    使用sysV脚本:

    1.cp mysql目录/support-files/mysql.server /etc/init.d/mysql.server

    2.修改mysql.server的 basedir 和datadir(如果不是安装在/user/local/mysql)

    3.chkconfig --add mysql.server

    4.chkconfig --level 2345 mysql.server on

linux开启FTP

    1.查询是否安装 ftp

    $:which vsftpd (yum list installed vsftpd)

    2.安装 

    $:yum install vsftpd

    3.开启

    $: service vsftpd start

    4.加入到开机启动(sysV)

        $:chkconfig --add vsftpd

        $:chkconfig --level 2345 vsftpd

    (

        5.vsftpd的三个主配置文件

            /etc/vsftpd.conf //服务器的主配置文件

            /etc/ftpd.ftpusers //此文件内的用户都不能访问vsftpd服务器

            /etc/vsftpd.user_list //可能会被拒绝访问服务喊叫或允许访问

        6.vsftpd.conf的配置参数

            anonymous_enable=YES //启用匿名用户

            local_enable=YES //允许本地用户访问vsftpd服务器

            write_enable=YES //允许上传

            download_enable=YES //允许下载

            anon_upload_enable=YES //允许匿名用户上传

            anon_mkdir_write_enable=YES //允许匿名用户创建目录和上传

            anon_other_write_enable=NO //不允许匿名用户删除和改名

            local_max_rate=20000 //本地用户的最大传输速率,单位是字节/秒

            anon_max_rate=5000 //匿名用户的最大传输速率,单位是字节/秒

            local_umask=022 //去掉写的权限

            file_open_mode=0666 //上传文件的权限

            xferlog_enable=YES //维护日志文件,详细记录上传和下载操作

            xferlog_std_format=YES //传输日志文件将以标准的xferlog格式书写,日志文件默

            认为/var/log/xferlog

            hide_ids=YES //隐藏文件夹和目录属主

            port_enable=YES //允许使用主动传输模式

            pasv_min_port=(1024<port<65535) //指定PASV模式可以使用的最小端口

            pasv_max_port=(1024<port<65535) //指定PASV模式可以使用的最大端口

            connect_from_port_20=YES //定义FTP传输数据的端口,默认是20

            ascii_download_enable=NO //设置不可使用ASCII模式下载

            listen=YES //让FTP工作在独立模式下

            pam_service_name=vsftpd //用户配置文件认证

            userlist_enable=YES 

            tcp_wrappers=YES //将使用wrappers作为主机访问控制方式

            idle_session_timeout=600 //表明空闲时间为600秒

            data_connection_timeout=120 //表明数据连接超时时间为120秒

            chroot_local_user=YES //用户登录后不能访问自己目录以外的文件或目录

            listen_port=4444 //修改FTP服务器的端口号


     

猜你喜欢

转载自my.oschina.net/u/2246410/blog/1802705