mysql级联复制(pos)

本文记录 mysql 数据库级联同步的配置步骤。

目前已有3、4两台以pos的方式互为主主。正在将其迁移到新环境1、2,故而先对其进行级联复制,使用4为主库,1为从库,2为子从库,最后再将1和2调整为主主同步。

由于原环境为pos的方式进行同步,故而级联复制也以pos方式进行。

  1. 三个数据库实例修改my.cnf配置文件,

    • 主库4 和 从库1 要打开log-bin

    • 三个server-id不能一样

    [mysqld]
    server-id=1 #UPDATE //主主或主备节点的ID需要不一样
    log-bin=mysql-bin
    binlog_format=MIXED
    innodb_buffer_pool_size = 8589934592 #update
    max_connections=200 #update
    sync_binlog=1
    slave-skip-errors = 1062,1032,1060
    log-slave-updates
    innodb_flush_log_at_trx_commit=1
    bind-address = 0.0.0.0
    relay-log=mysql-relay-bin
    auto_increment_increment=2 #UPDATE
    auto_increment_offset=1 #UPDATE:master-1, slave-2
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    symbolic-links=0
    
  2. 4上设置从库账号,导出库文件。

    # mysql-h0.0.0.0 -ppasswd
    
    mysql> grantreplication slave on *.* to 'slave'@'%' identified by 'slave';
    mysql> flushprivileges;
    mysql> \q;
    
    # 导出库文件
    mysqldump -h0.0.0.0 -ppasswd --master-data --single-transaction --hex-blob -R --triggers --routines --events -A >/var/lib/mysql/dmflow_all.sql
    
  3. 获取file 与 pos点

    cat /var/lib/mysql/dmflow_all.sql |grep "CHANGE MASTER TO" | head -1
    # 结果显示
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000341', MASTER_LOG_POS=857418428;
    
  4. 新建1上的数据库:

    # 修改 my.cnf 中的相关配置
    
    # 运行镜像
    sudo docker run --name xxx --restart=unless-stopped -p 3000:3306 -v /app/mysql/my.cnf:/etc/mysql/my.cnf -v /app/mysql/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=passwd -d percona:5.7
    cp dmflow_all.sql /app/mysql/datadir
    

    使用客户端测试可以连通即ok。

  5. 数据库1还原,这里包括用户和数据都和源库完全一致

    docker exec -it xxx /bin/bash
    cd /var/lib/mysql
    mysql -h0.0.0.0 -ppasswd
    mysql> source dmflow_all.sql
    
  6. 数据库1同步4

    mysql> grant replication slave on *.* to 'slave'@'%' identified by 'slave';
    mysql> flush privileges;
    mysql> change master to master_host='xxx', master_port=3000, master_user='slave', master_password='slave', master_log_file='mysql-bin.000341', master_log_pos=857418428;
    mysql> start slave;
    mysql> show slave status\G;
    

    主要确认两项:

    (a)Master_Log_File、Read_Master_Log_Pos 与配置的参数一致;

    (b)Slave_IO_Running、Slave_SQL_Running都为YES;

  7. 验证:

    在 4 上的 MySQL 镜像进行测试

    mysql -h0.0.0.0 -ppasswd
    
    mysql> create database test;
    mysql> show databases;
    mysql> show slave status\G;
    

    同时在 2.3.255.1 中确认已建好数据库:

    mysql> show databases;
    mysql> show slave status\G;
    

    按照同样的方式,导出1的数据文件,将2作为1的slave 。

  8. MySQL修正

    在级联同步ok,环境迁移稳定后,我们还需要将先前的1作为4的slave停下来,再将其作为2的slave,组成主主模式。

    在1上执行

    mysql -h0.0.0.0 -ppasswd
    
    mysql> show databases;
    mysql> show slave status\G;
    mysql> stop slave;
    mysql> reset slave all;
    
    mysql> show master status;
    

    在2上查看file和pos:

    mysql -h0.0.0.0 -ppasswd
    
    mysql> show slave status\G;
    mysql> show master status;
    

    在1上 执行slave操作

    mysql> change master to master_host='xxx', master_port=3000, master_user='slave', master_password='slave', master_log_file='mysql-bin.000005', master_log_pos=915704247;
    start slave;
    
    show slave status\G;
    

    验证操作按照先前的方式,创建删除数据库进行对照。

  9. tips

    做验证的时候,以前有遇到在某个库多一两个数据库的情况,删除多的数据库后,从库同步会失败并停止同步。此时可以让从库跳过这个错误,继续同步。

    # 从查看同步情况
    mysql> show slave status\G  
    
    # 跳过一个报错:
    mysql> stop slave; 
    mysql> set global sql_slave_skip_counter=1; 
    mysql> start slave; 
    
    mysql> show slave status\G 
    


convert 命令批量转换 png 为 jpg 图片格式

背景

jpg 的压缩率比 png 要高,很多情况下我们并不需要高分辨率,为了节省系统空间,我一般都是将 png 图片批量转换成 jpg 再使用。于是这一篇介绍一下如何快速实现。

详细介绍

Linux 的 convert 命令可以用来转换图像的格式,支持JPG, BMP, PCX, GIF, PNG, TIFF, XPM和XWD等类型:

convert  xxx.jpg  xxx.png   将jpeg转成png文件 
convert  xxx.gif   xxx.bmp  将gif转换成bmp图像 
convert  xxx.tiff    xxx.pcx   将tiff转换成pcx图像 

简单应用

或者改变图像的大小:

convert -resize 1024x768  xxx.jpg   xxx1.jpg 
convert -sample 50%x50%  xxx.jpg  xxx1.jpg

旋转图像, 将图像顺时针旋转270度

convert -rotate 270 sky.jpg sky-final.jpg

在图像里面添加文字:

在图像的10,80 位置采用60磅的全黑Helvetica字体写上 Hello, World!

convert -fill black -pointsize 60 -font helvetica -draw 'text 10,80 "Hello, World!" '  hello.jpg  helloworld.jpg 

安装

apt-get install imagemagick
convert -version 

批量转换

----------- 从 PNG 转换到 JPG -----------
$ ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.png}.jpg"'
----------- 从 JPG 转换到 PNG -----------
$ ls -1 *.jpg | xargs -n 1 bash -c 'convert "$0" "${0%.jpg}.png"'

水印

convert 1.png -fill white -pointsize 13 -draw “text 10,15 ‘lifesinger 2006'” 2.png 

可以用-font指定字体,需要安装Ghostscript支持: http://www.cs.wisc.edu/~ghost/

还可以用composite命令在所有图片上加上水印,http://www.imagemagick.org/script/composite.php


离职总结:大公司与小公司的个人体验 - CSDN学院

蛮有感慨的,转载自CSDN学院

离职在即,在准备下一个工作环境的这段时间,忽然有一阵感慨,工作近五年,在这段时间中,体验了两种不同的工作环境:一个规模很大,各种开发体系完备的大公司,另一个(也是目前的)是一个规模 100 人左右的小公司。目前正在准备离职中,对于两种不同的环境,很想评论一些什么,但是由于目前工作年限较低,也没什么资格作什么评论,在这个时间,在这样一个心态下,就给自己留点什么,对于今后彷徨时,给自己一个参考(不说谁好谁坏)。

很多人在买车时担心,车子是好是坏,总是会参考各种论坛的各种评论,近来我也在逛论坛,也在参考其他人的评论,但是好坏参半,究竟如何选择仍然拿不定主意,但是,其中的一条吸引了我的目光:汽车就像是一段路,而大家的口碑就是地图,地图只是一个参考,路好不好走还是要自己走走才知道。

在离职的时候彷徨过,走了之后要找一个怎样的工作,要去一个怎样的公司,要走一个怎样的方向,记得当时很流行的就是去一个小公司拼几年,没有那么多文档,没有那么多流程,你只要编码就好,而且钱多多。

当时真的就觉得,小公司没有这些流程,效率一定会高很多,却不甘心由一个那么大的公司跳到一个只有一间小办公室这样的公司。拿不定主意的时候又想到了北漂,多么流行的一个就业方向,虽然向往,却没有向北京投出一个简历。

后来有一个外企的机会,借着这个机会,也去一趟首都,总不至于在中国这么久却没去过首都,太说不过去了,但是,当我真正坐在会议室里,看着面试官很悠闲的听完我所做过的项目,就结束了面试后,开始感觉到现实的残酷和自身的不足了,北漂适合我么?当我在游北京看到每天的地铁二号线的人山人海时,我放弃了,这里不适合我。是啊,适不适合,不是别人一句话说的算的,还是要亲自体验才能知道是否合适。

流程控制,大公司讲流程,全程 QA 跟随,每一个环节都有很正式的「小仪式」。参与过的一定都很痛苦,QA 怎么那么烦啊,什么事都管,每天的例会,每周的早会,都会有 QA 唠唠叨叨……