Mysql主从复制安装

阅读前了解一下mariadb与mysql的关系 centos7使用二进制包安装mysql sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql cd /usr/local sudo tar zxvf /path/to/mysql-VERSION-OS.tar.gz sudo ln -s full-path-to-mysql-VERSION-OS mysql # 如果要删除软链接使用unlink mysql cd mysql sudo chown mysql:mysql -R /usr/local/mysql sudo chmod 755 /usr/local/mysql/ 修改/etc/my.cnf配置 [mysqld] bind-address=0.0.0.0 port=3306 user=mysql basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock log-error=/usr/local/mysql/data/mysql.err pid-file=/usr/local/mysql/data/mysql.pid #character config # character_set_server=utf8mb4 # symbolic-links=0 # #explicit_defaults_for_timestamp=true # # # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in [http://fedoraproject....

March 21, 2023 · 2 min

ANTLR学习笔记(2)

书籍名称:The definitive ANTLR 4 Reference 章节:Chapter4 A quick tour ANTLR解析的模版 g4文件中这样定义可以在生成的java文件中创造出常量MUL 使用vistor手动遍历 使用Listener 还可以深度自定义 public static void main(String[] args) throws IOException { String inputFile = null; if (args.length > 0){ inputFile = args[0]; } InputStream is = System.in; if(inputFile!=null){ is = new FileInputStream(inputFile); } ANTLRInputStream input = new ANTLRInputStream(is); ExprLexer lexer = new ExprLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); ExprParser parser = new ExprParser(tokens); ParseTree tree = parser.prog(); System.out.println(tree.toStringTree(parser)); } 词法解析和语法解析可以拆分成两个文件,使用idea插件生成只需要先生成词法再生成语法就可以。...

March 8, 2023 · 1 min

死亡在冬日

这是一篇旧稿,迁移到本博客 给活着的老人做棺材有一个专门的说法叫做做柴。柴字到底是怎么写我也不是很清楚,发音确实叫柴。做柴要请人吃饭,我母亲的好友的母亲做柴,请我去吃饭。我自从在外求学就没有见过这位老人家。先见面的是她的丈夫,背比我记忆中驼了很多,头发光泽也黯淡了不少,走路开始有点颤颤巍巍的了。后来也见到那位奶奶,看上去虽然显老,但也挺有精神。我的母亲告诉我,这位老人被查出来患了癌症。医生刚说这个消息的时候她家里人谁也不信,觉着老人家精神挺好的,说话做事也并无大碍。医生说现在看上去好好的,谁知道哪一天就头一仰倒下去。家里人要带老人家去大医院再去诊一诊,老人家摆摆手不愿去。我的母亲说我北边奶奶的柴也做了好几年了,就放在后面茅坑旁边的屋子里。 饭桌上自然聊邻里奇闻轶事,谈论的最多的是我东边的维来爷爷家的女婿喝酒开电动车摔死了。我小时候一直喜欢跑到维来爷爷家要喝他家的奶粉,但长大后很少去他家,因为他家有一只贼凶的狗,我一路过就冲着我旺旺大叫。加上以前维来爷爷家是养鸽子的,每次我一去,狗叫鸽子飞,好不热闹。但是维来爷爷的女婿我从没见过,直到那天去吃席,交份子钱的时候路过灵堂,看到尸体的脑袋缠上满满当当的绷带。我撇了一眼就走了,不敢仔细看。我的姑爷来我家吃饭时说他见了那个女婿的头,肿成了猪头,很难看。维来爷爷的孙女上高二了,我们吃席的时候有礼仪牵着她给大家磕头,每一个人都放下了碗筷端详着她,就像洞里一只只倒挂的蝙蝠。我的母亲说维来爷爷的女儿这几天一定会瘦很多,已经好几天没怎么吃饭了,邻里都去安慰她。姑爷说她反正已经够胖了,瘦一点也好。 我朋友的老太也去世了,应该算善终,活了八九十岁了,拉扯大了九个孩子。只是我去我朋友家时,他的奶奶把我认错成另一个人了。小的时候这位奶奶对我很是亲切,但现在少了几分亲近,因为她大抵是不认识现在的我了。 今年过年很是冷清,年前大家都讨论着维来该怎么过这个年。年后大家都在骂维来女婿在外面赌钱欠了二十多万。 我想着躺在灵堂的那个人,维来家什么时候没有鸽子了,我也记不得了。

March 3, 2023 · 1 min

ANTLR学习日志

阅读的是作者自己写的**The Definitive ANTLR 4 Reference** 使用方式: 要装有jdk cd /usr/local/lib # 找一个想安装的目录就行 curl -O https://www.antlr.org/download/antlr-4.0-complete.jar# 这里必须使用https的链接,https://github.com/antlr/antlr4/issues/2422 # 一个jar包就可以跑了,下面都是为了省事 export CLASSPATH=".:/usr/local/lib/antlr-4.0-complete.jar:$CLASSPATH" alias antlr4='java -jar /usr/local/lib/antlr-4.0-complete.jar' helloword grammar Hello; // Define a grammar called Hello r : 'hello' ID ; // match keyword hello followed by an identifier ID : [a-z]+ ; // match lower-case identifiers WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines, \r (Windows) antlr4 Hello.g4 javac *....

February 28, 2023 · 2 min

HadoopMapReduce代码分析GrepExample(二)

run方法先进行命令行参数校验,没什么好看的。 接下来创建临时文件,用的是Path类,目前也没什么好看的。 接下来获取Configuration,用的实现的接口的getConf(),在之前ToolRunner中已经set了一个了,这个Configuration很简单,直接new出来的,loadDefaults为true。 (Context和conf是不一样的两个东西) conf目前看起来是简单的map存放各种配置,里面会有些对过期的key的检查与设置。 接下来创建了一个Job,job里面用了深拷贝将conf里的配置拷贝给自己,这样job中随便怎么修改conf也不会影响外部,深拷贝将conf变成了JobConf。 然后在Job中set需要执行的类,这次就是Grep.class,我觉得这一步非常关键,好好学一下。 进去之后就是先找jar包,好像确实就是找jar,最后返回的是file:这种通用文件定位格式的字符串。 后面的设置mapper,reducer,combiner class没什么复杂的,就是把对应的class保存起来。 重头戏应该是waitForCompletion,这个函数就是将job提交到cluster。 Job一共就只有两种状态,DEFINE,RUNNING,如果是DEFINE那就提交。粗看了一下,这里的wait是提交上去之后立即返回,然后不断轮询状态,要是轮询失败了就抛异常。看看submit()函数里具体做了什么。 好吧,submit这里就有点看不懂了,好像做了一些mock,得debug进去看一看

February 23, 2023 · 1 min

手机人生

来北京工作之后办了一张北京的中国移动卡,办完之后才发现是一张刚注销的卡。这张卡还绑定着原机主的银行卡,所以原机主的转账记录收入支出的信息都发给我了。从短信内容来看,原机主应该是个房东,因为这张卡绑定的银行卡的每月收入都来自自如的转账。而且中间有几次中介打电话问我要不要考虑卖掉哪儿哪儿哪儿的一套房。 每个月我收到工资后先划出一部分交房租的时候,我的手机倒是会弹出收租的信息,倒是同时体验了一把房东的快乐。 今天大概是他的子女来京?早上七点多给我打电话,听那边的声音说刚下飞机,说这个手机号是她的不知道为什么串号了。这个时间工作日坐飞机来北京,大概率是大学生?返校季。后来又有个男人打电话给我,可能是女子不清楚发生什么了,让胆大的来。不过好笑的是,每次对方都问我我是哪位?那我怎么自我介绍?难道还得把自己生世阐述一番?我也只好以问代答,“您是哪位”。中国的见面招呼已经从“吃饭了”变成了“你哪位?”,感觉有“how do you do”的无厘头之势。 我看场面太尴尬,就直接说明了这个手机号应该是原主人注销了,请麻烦通知原主人还有他的亲朋好友。男人用一口很地道的北京话对我道谢。 以后可能不能再体会一下房东的快乐了吧。

February 22, 2023 · 1 min

HadoopMapReduce代码分析GrepExample(一)

Grep程序在谷歌的MapReduce论文中也作为示例程序提到过,在大规模数据集中并行找出符合指定模式的文件。 https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html 按照官方指南,只需要在hadoop安装目录下用hadoop程序就可以作为单机来跑hadoop 按照官方的指南,跑一个简单的grep程序,具体的jar包得看使用的自己使用的版本 $ mkdir input $ cp etc/hadoop/*.xml input $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.4.0-SNAPSHOT.jar grep input output 'dfs[a-z.]+' $ cat output/* 启动jvm的调试功能,只需要在hadoop-env.sh中添加 export HADOOP_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" (这部分是jvm调试相关) 在idea中打上断点,通过查看haoop-mapreduce-examples模块中的pom文件,可以看到在打包插件里指定了org.apache.hadoop.examples.ExampleDriver类为启动类。 那么就从这个类开始分析吧。 ExampleDriver这个类是用来将各种测试类注册进去并加上一些文字性描述,能看到自带了很多实例程序,我这次分析的是grep程序,对应注册的是Grep类。 ExampleDrive类中使用ProgramDriver类,这个ProgramDriver中使用一个map保存测试类和他们对应的名字关系,而测试类在ProgramDriver中被解析成ProgramDescription,ProgramDescription中保存了测试类的main方法和描述,然后测试时,比如我们的grep程序,先用grep这个名字找到对应的ProgramDescription然后直接调用main方法把命令行中的剩余参数传入。 接下来看一下Grep中的main方法 main方法中用了一个ToolRunner去run,run方法中提供了Configuration类,Grep类,和参数,能猜到应该是使用了默认的配置项去调用Grep,能看到这里的核心是一个Tool接口,Grep继承了Tool接口,ToolRunner会运行Tool。 根据javadoc看看Tool是什么 看样子hadoop为了方便测试写的一个接口,把一些环境的初始化配置隐藏起来了。 那来看看Configuration是什么,这个应该是核心类 这个Configuration就负责加载core-site那些配置文件已经用户程序中设定的配置,具体的配置目前应该没必要深究。可以看到使用默认配置是将loadDefault这个bool值设为false,然后往一个WeakHashMap中put一个key为自己,value为null的键值对。 第一次看到WeakHashMap,学一下。 https://web.archive.org/web/20061130103858/http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html 这里使用的原因,应该是为了没有地方继续使用Configuration时可以让垃圾回收机自动回收这个entry,Configuration应该是一个比较大的对象。有几个问题,第一,什么时候Configuration会不再有对象引用呢?第二,这里的map中会存放哪些Configuration呢?第三,是通过把各种不同路径的C configuration都存在这里然后只用其中的部分,剩下的部分如果一直不使用就让垃圾回收器回收吗? 现在可以进入ToolRunner方法中去看了 一上来就是CallerContext.getCurrent(),经常看到一些这种getCurrent的操作,今天仔细盘一下。 进去之后调用的是CurrentCallerContextHolder.CALLER_CONTEXT.get() 类描述里贴心的给了链接https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom 学一下,原来这就是线程安全的单例的使用案例,利用jvm初始化类的特性。 不过这个单例有点变种,返回的是ThreadLocal变量,这部分内容我还是有点生疏。 学习一下ThreadLocal 我现在理解的是ThreadLocal给每个线程属于自己的对象, ThreadLocal表示线程的“局部变量”,它确保每个线程的ThreadLocal变量都是各自独立的;ThreadLocal适合在一个线程的处理流程中保持上下文(避免了同一参数在所有方法中传递;https://www.liaoxuefeng.com/wiki/1252599548343744/1306581251653666 而inheritableThreadLocal会让每个子进程继承父进程的threadlocal CallerContext是一个单例,使用线程安全的单例模式,CALLER_CONTEXT这个线程变量就是实例,那就是说CallerContext在每个线程中只存放一份。 “单例”模式-ThreadLocal线程单例 再回到ToolRunner的run方法,通过getCurrent()获取当前线程的CallerContext,第一次应该没有(因为没有写initValue方法),所以手动构造一个CallerContext。CallerContext中还有个建造者,使用建造者模式build出CallerContext。 这个builder构造函数目前看起来就是简单的把context存起来,当然前面做了一些简单的合法判断。 最终build时设置了context和signature两个变量,目前不是很清楚是干什么的。 好,现在已经有了线程的CallderContext了,接下来是一个CommonAuditContext.noteRntryPoint(tool), 这个函数将类和一个PATAM_COMMAND(字符串)放到一个全局的map中去了,我猜这个应该是开启审计功能的开关?后面审计部分可能会看那个全局表。 然后是再判断conf是不是null,是就再创建一个新的。感觉有点冗余。 接下来创建了一个GenericOptionsParser,这个类是用来解析命令行参数的,其实感觉像开源项目中这种解析命令行参数的类还是值得看得,不然每次命令行参数都用的云里雾里的。里面用了另一个开源的参数解析包CLI,就不细看了。 Grep类继承了Configured,而Configured又实现了COnfigurable接口,所以有setConf()以及Configuration,run方法中把生成的conf给set进了tool自己 set the configuration back, so that Tool can configure itself...

February 21, 2023 · 1 min

HadoopMapReduce学习实况(1)

MapReduce是一个编程模型,基本思想是: 用户编写一个Map程序,这个Map程序的输入是一个key/value pair,输出也是一个key/value pair。(当然也能是一组,这就是具体实现的区别,下文会看谷歌的具体实现) 用户再编写一个Reduce程序,这个Reduce程序的输入是先前Map程序的输出,这个Reduce程序将先前Map程序输出的所有key/value pair按照key进行merge。 这个思想很简单,但是在实践中想要用这种编程方式并行处理大数据需要处理一些问题。 输入的数据进如何进行分区 每一个程序该在哪台机器上执行 集群中有机器坏了如何处理 机器之间如何传递数据 这些问题都需要解决,并且要高效,要让程序尽可能的快 谷歌把这些问题解决了,然后发表了这篇论文,厉害之处在于他们把上述复杂的问题解决了(还保证程序能跑的很快),给开发者暴露出简单的接口,这样开发者只需要专注于程序的逻辑,不需要考虑分布式运行时出现的各种问题。 谷歌的MapReduce编程模型 用户写的Map程序接受一个key/value pair,输出一组key/value pairs。 MapReduce Library将这一组key/value pairs按照key进行merge,然后将结果传给用户写的Reduce程序(为了防止OOM,Reduce通过迭代器模式获取这些结果)。 用户写的Reduce程序接受一个key和这个key对应的一堆values,然后把这一堆values变成一小堆values,这一小堆values的数目通常是1或者0。 再明确一下MapReduce只是一种编程模型,在不同的场合下可以有不同的实现

February 17, 2023 · 1 min

Hadoop源码编译阅读

mvn test -Dtest=TestLongLong 在跑测试的时候,出现了如下问题 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (common-test-bats-driver) on project hadoop-common: An Ant BuildException has occured: exec returned: 1 [ERROR] around Ant part …… @ 4:69 in /home/chuhuilong/hadoop/hadoop-common-project/hadoop-common/target/antrun/build-main.xml 根据错误提示,是hadoop-common这个模块中的antrun插件有问题,去该模块的pom中查看, 是执行这个execution的时候出错了。 拿着common test bats driver关键词去hadoop官方的社区里搜索 https://issues.apache.org/jira/browse/HADOOP-14618 这个问题和我的出错一样,hadoop版本是3.0.0也很接近,只有一条评论说是running the build as a non-root user,以非root用户权限执行之前在网上看别人调试hadoop2.0版本的时候强调过,但是我是用的官方docker直接调试的,这些用户权限应该都是调好了的吧。并且这个issue中有执行的脚本出错的具体信息,我这边是没有的。 不过和我这个信息一样的就只有这个issue了,那我看看我执行mvn命令的用户权限是什么 还是没看出什么 再沉思分析一下,这个插件是在做脚本执行的测试,说明是有脚本执行失败了,那我找出来是哪个脚本之心失败了应该就可以进一步分析 看到插件里面,是执行了src/test/scripts下的run-bats.sh 可以看到这个脚本就是把scripts下的脚本都跑一遍 再看看我的日志,说明这个脚本跑起来了了,有脚本没跑起来,那就按照顺序看看是到哪个没跑起来 官方issue里是hadoop_mkdir.bats这个脚本没跑通,我这里这个脚本跑通了 我最后一个start-build-env.bats的脚本已经执行了也没报错,为什么还是没通过呢? 是不是全部跑完然后中间有不ok的就算报错,于是我回头再看了一遍日志 原来hadoop_java_setup.bats这个脚本中有not ok的 看看这个脚本 原来这个脚本里有四个测试,这时我也才搞懂日志中1..4是代表测试的数目 第三个测试出了问题 这一下问题更精确了,带着hadoop_java_setup这个关键字再去hadoop社区看一下 但是这个关键字太宽泛了,一大堆有关的问题 这个测试猜测是要没有执行权限的时候不执行,但是不知道为什么这里的chmod a-x好像没有起作用,我把-eq 1 改成-eq 0,也就是和第四个对比测试一样就能暂时通过了,不过这应该是个问题。 想要执行单元测试 遇到了这个问题 Unable to load Atom ’execute_script’ from file ‘:/ghostdriver/....

January 26, 2023 · 1 min

土地爷

家乡过年有一个风俗,拜土地爷和土地娘娘。我是没听说过土地娘娘的,也许乡里人认为土地爷总得讨个老婆,所以应该是有土地娘娘的。也可能烧制土地爷佛像的泥瓦匠多烧了一个女像,索性就当土地娘娘打包卖出去了。 在除夕夜的零点,跨年之际,土地庙旁的天空中一声爆竹炸响,黑夜中一点亮光闪过,拜土地的活动就该开始。不知道是怎样一股无形的力量驱使着,人们心照不宣地认为第一个磕头的是个好彩头,于是老一辈假装心不在焉地站好位置,一边互相拜年说欢喜话,一边提防着四周,不时看看手表,零点一到,一半身子去拦着后来者,一半身子将自己的孙子孙女推到土地爷爷面前去磕头。 磕头的都是小孩,大人们负责烧香,放鞭炮,男人们可能会在周围谈论几句。土地庙很小,但是烟火气这时候很足,没有人知道这座小土地庙是什么时候建的,里面两尊土地像看上去就年代久远,很有佛性。 县升市,上头派来了一个新的女书记,具体职位不清楚,大家叫大官都叫书记。坊间传闻她信基督教,所以要拆了全县(现在是市了)的土地庙。凡举报土地庙者奖励300元,这招很有效。推土机突突突突地碾过一尊又一尊土地爷的像,当然他老婆也未能幸免。我们的土地庙也要被推倒,土地庙前的一户人家,听到此消息连夜去土地庙中抢救土地爷爷和土地娘娘,乡里乡间也前来抗议。抗议颇有成效,推土机在一片抗议声中把土地庙碾的更碎了一点。 人民群众不满意,所以只能诅咒,诅咒女书记迟早完蛋。诅咒颇有成效,坊间传闻,推土机在一次碾土地庙时翻到沟里去了。于是女书记一声令下停止了对土地庙的清除活动。抢救出土地爷爷和他老婆的那个人,呼吁大家一起重建土地庙。乡里大家一起捐款出力,重建了土地庙。 所以今年我回来的时候,拜的已经是新土地庙了。新的土地庙与之前的相差不大,砖头新了,砖缝的石灰粉还是白色的。倒是旧的土地爷爷和他老婆那两尊历史悠久的像没有换回来,两个现代化的崭新的新时代土地爷爷和土地奶奶的像摆在桌上。而他们身后本来应该空空如也的墙上,张贴了一张巨大的毛主席海报。

January 26, 2023 · 1 min