Write the Code. Change the World.

8月 22

主服务器操作步骤

做主从复制最重要的一点就是双方的server-id不能相同;然而在主服务器上只需要三步:
1. 是改server-id
2. 启用二进制日志
3. 创建有复制权限的帐号

vim /etc/my.conf

# 修改下边两项, 保存退出
log-bin=/alidata/service/mariadb/binlogs/master-bin
server-id = 1

:wq

# 创建目录
mkdir /alidata/service/mariadb/binlogs

# 设置用户组(先查看用户组)
grep mysql /etc/group
groups mysql

chown -R mysql.mysql /alidata/service/mariadb/binlogs

重启 mysql ,设置权限


# 重启 mysql service mysqld restart # 进入 mysql,设置权限,生效 mysql -u root -p GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'wangfang'@'xxx.xxx.xxx.105' IDENTIFIED BY '!Wfxxxxxxxxxx'; FLUSH PRIVILEGES;

再来配置从服务器配置。

从服务器操作步骤

编辑配置文件

vim /etc/my.conf

# 打开二进制文件 (从服务器可以不用打开)
# 二进制日志目录
log-bin=/tencent/service/mariadb/binlogs/master-bin
# 更改一个和主服务器不通的 id
server-id = 2
# 中继日志
relay-log =/tencent/service/mariadb/relaylogs/relay-bin 

:wq 保存退出

创建文件夹,并设置用户组

mkdir /tencent/service/mariadb/binlogs/

mkdir /tencent/service/mariadb/relaylogs/

chown -R mysql.mysql /tencent/service/mariadb/binlogs/

chown -R mysql.mysql /tencent/service/mariadb/relaylogs/

# 重启
service mysqld restart

登入 mysql 查看中继日志是否启动中

mysql -u xxxx -p 

# 查看中继日志是否启动
SHOW GLOBAL VARIABLES LIKE '%relay%';

# 出现 relay_log 项对应的文件就表示启动了。

配置从服务器连接主服务器相关

  • MASTER_HOST='xxxxxxx' --主服务器的IP地址
  • MASTER_USER='xxxx' --主服务器上授权复制的用户名
  • MASTER_PASSWORD='xxxx' --主服务器上授权用名的密码
  • MASTER_LOG_FILE='mysql-bin.000006' --主服务器上的日志文件
  • MASTER_LOG_POS=245 --主服务器上日志文件的位置
# 先在主服务器上查询
show master status;

+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |    93207 |              |                  |
+-------------------+----------+--------------+------------------+

这儿只需要看 File 和 Position,其它的两个分别是白名单和黑名单,意思为同步哪几个数据库和不同步哪几个数据库,可自行根据需求进行设置。记录了前两个字段后,在从库上执行以下语句。

# 从服务器上执行
CHANGE MASTER TO MASTER_HOST='xxxxxxx',MASTER_USER='xxxxxxx',MASTER_PASSWORD='xxxxxxx',MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=93207;

但是此时的从服务器还没有工作起来,要使从服务器工作起来还要手动启动复制线程,我们上面的步骤写得很明白。

# 从数据库
START SLAVE;

oo

从服务器还得自己建立数据库吗。

主服务器重启了,从服务器从新配置

主服务器操作

# 查看 File Position
show master status;

从服务器操作

stop slave

# 再执行 CHANGE

# 再 start
start slave

参考

https://www.cnblogs.com/xiaocen/p/3702945.html

https://www.cnblogs.com/gspsuccess/p/9182545.html?utm_source=debugrun&utm_medium=referral

https://blog.csdn.net/justlpf/article/details/82908740

http://blog.itpub.net/30221425/viewspace-2637246/

阅读全文 >>

8月 05

有时候,会去查看系统的磁盘空间。这个时候,一些命令就用的着了。

查看磁盘空间

# df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
# `-h` 选项为根据大小适当显示
df -h

显示内容参数说明:

  • Filesystem:文件系统
  • Size: 分区大小
  • Used: 已使用容量
  • Avail: 还可以使用的容量
  • Use%: 已用百分比
  • Mounted on: 挂载点 

查看某个文件夹或文件的大小

# 查看当前文件夹的总大小 `h` 以适当大小显示(比如 M,G 单位)
du -sh

# 查看对应深度的文件大小
du -h --max-depth=1

# 查看某个文件大小
du -h xxx.txt

排序功能就不说了,太多记不住。实用即可。

阅读全文 >>

7月 25

1.继承BaseController预设公共变量

我们的视图有很多公共部分,比如导航菜单、底部信息、用户信息等,通常我们会以单独的视图组件来处理这些元素区块,但是如何从后端传递这些组件需要的数据变量是个问题,因为这些组件在多个页面中共用,从后端角度来看,会涉及到多个路由/控制器方法,难道我们要每次都重复获取并传递这些数据吗?有没有一种方式可以支持一处定义,多处复用?
那还用问,肯定有的叁,是不是脑海中闪现出了BaseController,嗯,是的,在没有接触laravel之前,通常我们处理上述问题的方法都是继承一个基控制器,把公共变量放在基类中实现,这样就能达到复用的目的,就像下面这样:

<?php
namespace App\Http\Controllers;

use App\Models\Config;
class BaseController extends Controller
{
    private $cfg;

    public function __construct()
    {
        $this->__init();
    }
    protected function __init()
    {
        $this->cfg = (object)Config::getAll();
    }
}

阅读全文 >>

7月 20

既然是再来一次定时任务,那我们就要有明确的目标以及观察点。来列列。

列列观察点

  1. 如何开启定时任务,开启多大频率或定时的任务,几种方式开启。

  2. 定时任务日志功能。(这样才能更好的找到问题的所在)

  3. 定时任务的执行用户。比如 root 用户,非 root 用户。这之间有什么影响和不一样。

  4. 额外, no login 用户的 shell 执行。

开启定时任务

方法 1:

# 编辑,并添加定时任务
vim /etc/crontab 

方法 2:

# 给当前用户添加定时任务。如果是 root 用户登录的,就是给 root 用户添加定时任务(就是执行用户是 root)
crontab -e 

# 给 nginx 用户添加定时任务(编写命令即可)
crontab -e -u nginx

给 root 用户添加定时任务的缺点是 root 用户产生的文件,其他用户默认是没权限去操作的。比如写了日志,其他用户想继续打开该日志来编写,是没办法操作的。除非改权限设置等操作。

方法 3:

vim cron.txt

# 将定时任务命令写在 cron.txt 里边,然后再执行
crontab cron.txt -u nginx

方法 4:

以上的方法,只是命令在其他 sh 文件里。

查看,重启,关闭

查看关闭:

# 查看当前用户执行的定时任务
crontab -l

# 查看 nginx 用户执行的定时任务
crontab -l -u nginx

# 删除当前用户执行的定时任务
crontab -r 

# 删除 nginx 用户执行的定时任务

crontab -r -u nginx

重启:

//启动服务 
service crond start 

//关闭服务 
service crond stop 

//重启服务 
service crond restart 

日志

# 这里可以看到日志的
tail -f /var/log/cron

如果日志文件不存在(被删除了或啥的,请使用下面命令从新生起)

# 重启rsyslog服务:
service rsyslog restart 

# 重启 cron
service cron restart

报错

如果使用 nginx 这种 nologin 用户执行定时任务会报错的。如下:

(CRON) ERROR chdir failed (/home/nginx): No such file or directory

这个时候,只需要在 home 目录下,创建个 nginx 文件夹就 ok 了。

参考

https://www.jianshu.com/p/5d6a0d729ef7

阅读全文 >>

7月 17

条条大道通罗马,使用 linux 定时任务的方法也有很多种。都是 crontab,方式各不一样。列出常用,好用的一些命令。

基本

# crontab文件一般位于/etc/下,这里面存放系统运行的的调度程序
more /etc/crontab 

# 每个用户都会生成一个自动生成一个自己的crontab文件,一般位于/var/spool/cron目录下

cd /var/spool/cron
ls

# 查看当前用户或某个用户的定时任务,nginx 为用户
crontab -l nginx

# 编辑当前用户的定时任务
crontab -e

# 编辑某个用户的定时任务
crontab -e -u nginx

# 删除当前用户的定时任务
crontab -r

其实,laravel 使用定时任务不坑。坑的是一些细节问题。比如权限问题。如:root用户创建了定时任务,然后定时任务里边有了写日志的功能。这个时候,日志的用户组都是 root,然后其他用户组(nginx) 就没权限再写入数据了。这个时候,写入就会出错。这个就是坑。如果定时任务的用户是 nginx 就不会出现这个问题了。下边来下流程。

创建某个用户的定时任务

方式一

crontab -e -u nginx 

# 然后在里边编写命令即可

方式二

# 创建命令文本(cron.txt)。再执行命令
# * * * * * nginx /alidata/service/php/bin/php /alidata/www/kwva/test.kwva.cn/artisan schedule:run >> /dev/null 2>&1
crontab cron.txt -u nginx

参考

https://learnku.com/articles/6775/about-laravel-log-permissions

https://www.runoob.com/linux/linux-comm-crontab.html

https://www.jb51.net/article/98640.htm

https://blog.csdn.net/matengbing/article/details/81056524

阅读全文 >>

7月 09

使用 git 可以使用 sourcetree 这些工具。方便查看以及提交等操作。可有时候还是没命令来的爽快。这里就记录下 git 常用的命令,免得每次都要去找。

git

三个工作区:
1. 工作目录
2. 暂存区域
3. git 仓库 (本地和远程)

四种文件状态:

  1. Untracked (未跟踪)
  2. Unmodified (未修改)
  3. Modified (已修改)
  4. Staged (已暂存)

常规操作

# 添加所有
git add -A
git add .

# 添加某个
git add xxx.md

# 撤销添加某个文件(变成已修改状态)
git reset HEAD xxx.md 

参考

https://cloud.tencent.com/developer/news/159103

https://my.oschina.net/pmos/blog/817191

https://www.cnblogs.com/lfxiao/p/9378763.html

[https://blog.csdn.net/hyupeng1006/article/details/82979258]
(https://blog.csdn.net/hyupeng1006/article/details/82979258)

https://www.liaoxuefeng.com/wiki/896043488029600/897013573512192

https://www.jianshu.com/p/c2ec5f06cf1a

阅读全文 >>

7月 09

客服功能很常见,也很好用。如果自己单独开发,考虑到的问题会比较多。还不如使用腾讯自己的客服。虽然我们自己的产品已经有了聊天功能,依旧想使用腾讯自己的客服。怎么使用呢。

调用组件,简单直接

在小程序中,只要添加一个 button 组件,open-type 设置为 concact 就可以了。

<button open-type="contact">有事没事找客服</button>

平台方接收消息

  1. 先在小程序后台,添加客服人员。最多可以添加 100 个。
  2. 客服人员扫码小程序二维码或扫码打开网页端客服的二维码。
  3. 进入小程序客服或网页端客服。开始接待了。可以自定义模式。比如自动接待手动接待。也可以设置在线离线。

添加步骤:
1. 登录 https://mp.weixin.qq.com
2. 找到左侧功能,找到客服。就可以操作了。

自己的服务器也可以接受消息

消息不仅自己可以收到,还可以设置自己的服务器接受存储消息。

更多内容请看:https://developers.weixin.qq.com/miniprogram/introduction/custom.html

阅读全文 >>

7月 06

git 存在这样一个场景。曾经的代码用的 https 协议进行上传下载。这个时候,总是要输入用户名和密码。这样好烦好烦的。突然有一天,你想用 ssh 协议了(不用再输密码),这个时候就要切换协议了。下边就说说怎么操作。

没有公私秘钥,要生

# 生,一路回车就好
ssh-keygen -t rsa -C "abcd@mlxiu.com"

cat ~/.ssh/id_rsa.pub

生了后,先要将公钥内容复制出来,设置到你所托管的 ssh 设置相应的地方。比如托管的 gitlab 或 github,都有对应的地方设置。设置好了后,就可以切协议了。

查看切换协议

# 查看
git remote -v

# 切换
git remote set-url origin git@gitlab.xxxxxxx

然后你


git pull origin master git push origin master

就不用再输入账号密码了。

阅读全文 >>