蓝色步行者

每个人都有自己的梦想


  • 首页

  • 归档

  • 标签

  • 分类

  • 搜索

centos7安装mariadb

发表于 2017-08-26 | 分类于 Linux应用

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

安装

sudo yum install mariadb-server mariadb

使用

mariadb数据库的相关命令是:

sudo systemctl start mariadb #启动MariaDB

sudo systemctl stop mariadb #停止MariaDB

sudo systemctl restart mariadb #重启MariaDB

sudo systemctl enable mariadb #设置开机启动

出错及其解决方法

出错:Job for mariadb.service failed. See ‘systemctl status mariadb.service’ and ‘journalctl -xn’ for details.

执行 sudo systemctl status mariadb.service

根据提示查看 /var/log/mariadb/mariadb.log

出错原因:
InnoDB: Error: log file ./ib_logfile0 is of different size 0 8388608 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
InnoDB: Possible causes for this error:
(a) Incorrect log file is used or log file size is changed
(b) In case default size is used this log file is from 10.0
(c) Log file is corrupted or there was not enough disk space
In case (b) you need to set innodb_log_file_size = 48M

解决:
关闭服务:sudo systemctl stop mariadb;
删除对应文件:sudo rm -f /var/lib/mysql/ib_logfile*;
修改/etc/my.cnf文件,添加以下内容:
innodb_log_file_size = 8M
重启服务:sudo systemctl start mariadb

在你修改my.cnf的innodb_log_file_size参数前,请先停止mysql服务程序的运行(mysql的停止没有出现任何错误),并把/var/lib/mysql目录下的ib_logfile0、ib_logfile1、ib_logfile2等之类的文件移除到一个安全的地方(旧日志文件的保留是为了防止意外的出现),以便Mysql重启后可以将新的ib_logfile0之类日志文件生成到/var/lib/mysql目录下。如果没有什么意外,旧的日志文件可以删除。

(一些其他说法:http://cqfish.blog.51cto.com/622299/393346)

仍然出错:
[ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it

解决:
mysql_install_db --user=mysql --ldata=/var/lib/mysql/

重置root密码

sudo systemctl stop mariadb #停止MariaDB
mysqld_safe --skip-grant-tables& #对所有的表设置成无密码登陆
mysql -u root -p
mysql> use mysql;
mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql> quit;

导出

1.导出结构不导出数据
mysqldump --opt -d 数据库名 -u root -p > xxx.sql  

2.导出数据不导出结构
mysqldump -t 数据库名 -uroot -p > xxx.sql 

3.导出数据和表结构
mysqldump 数据库名 -uroot -p > xxx.sql

4.导出特定表的结构
mysqldump -uroot -p -B 数据库名 --table 表名 > xxx.sql  

导入

CREATE DATABASE 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use 数据库名;
source 数据库文件;

远程连接

mysql -u root -p
mysql> use mysql;
允许用户root使用密码rootroot从任何主机连接到mysql服务器:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'rootroot' WITH GRANT OPTION;
允许用户root使用密码rootroot从ip为192.168.1.3的主机连接到mysql服务器:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> quit;

ubuntu 14.04 远程连接

ubuntu 14.04安装的是mysql,而不是mariadb。
另外,若要远程连接ubuntu 14.04的mysql,除了上述操作外还需要在目录/etc/mysql下找到my.cnf,将bind-address = 127.0.0.1注释。

本地借由公网机跳板到私网机

发表于 2017-08-26 | 分类于 Linux应用

iptables设置规则

Iptables 指南 1.1.19
Iptables详解
iptables/netfilter全攻略详解

iptables默认三张表:
1、filter:防火墙,包含INPUT、OUTPUT、FORWARD
2、nat:网络地转转换,包含PREROUTING、POSTROUTING、OUTPUT
3、mangle:流量整形,包含所有的五条链

iptables的五条链 ->写规则的地方
1、INPUT:数据包的目地的是LINUX主机本身
2、OUTPUT:数据包由LINUX主机本身发送
3、FORWARD:数据包从一个接口进入,另一个接口发出(如果做路由转发的话必须开启/etc/sysctl.conf 修改net.ipv4.ip_forward=1)
4、PREROUTING:做路由之前
5、POSTROUTING:做路由之后

背景

A本地机
B公网机(跳板机):公网116.56.140.66,私网172.16.1.100
C私网机:172.16.1.56
A发送116.56.140.66:5000,B将其转发到C私网机172.16.1.56:5000

转发规则设置

1、打开内核转发文件,允许转发
echo "1" > /proc/sys/net/ipv4/ip_forward
2、将访问116.56.140.66:5000的数据包目的地址改为172.16.1.56:5000,但注意不要指定-d 116.56.140.66,因为公网机接收的数据包可能也是被某个路由转发过来的,原先发送到116.56.140.66:5000的数据包目的地址被该路由改变过了,即公网机接收的数据包的目的地址不是116.56.140.66
sudo iptables -t nat -I PREROUTING -p tcp --dport 5000 -j DNAT --to-destination 172.16.1.56:5000
3、允许转发目的地址为172.16.1.56:5000的数据包
sudo iptables -t filter -I FORWARD -p tcp -d 172.16.1.56 --dport 5000 -j ACCEPT
4、将访问172.16.1.56:5000的数据包源地址改为172.16.1.100(不要改为公网116.56.140.66)
sudo iptables -t nat -I POSTROUTING -p tcp -d 172.16.1.56 --dport 5000 -j SNAT --to 172.16.1.100

笔经面经

发表于 2017-08-26 | 分类于 资料收集

笔经面经

从春招到秋招,一个本科生的求职之路

1、C++如何限制类对象只能静态分配或者只能动态分配
2、内联函数与宏
3、虚基类指针
4、C++空类默认产生的类成员函数
5、指针和引用  
6、强制类型转换符
7、宏定义括号
8、拷贝构造函数调用场景
9、const使用场景
10、C++全局/静态存储区
11、setw(8)、setfill(*)控制输出间隔
12、浮点数表示

2017秋季校园招聘笔经面经专题汇总
2016秋招网易、百度、腾讯面经
C++ 面试问题

分布式资料收集

发表于 2017-08-26 | 分类于 资料收集

防重复请求

防重复请求处理的实践与总结
补:
前端控制、基于DB的状态验证、基于DB的唯一性索引、基于Redis的状态验证、基于Redis的请求计数器验证。

缓存

memcached完全剖析–1. memcached的基础
Memcached源码分析之基于Libevent的网络模型

网络资料收集

发表于 2017-08-26 | 分类于 资料收集

应用层

DNS原理及其解析过程
DNS 原理入门

会话层

会话层服务

运输层

TCP的nagle算法
测试udp服务的端口是否可用
TCP 的那些事儿(上)
TCP 的那些事儿(下)
补:
关于TCP连接的初始化序列号能否固定的解答:
从TCP三次握手说起–浅析TCP协议中的疑难杂症(1)
TCP初始化序列号ISN
原因包括:1、固定序列号容易被攻击者猜出后续序列号,从而遭到攻击;2、若ISN固定是1,客户端发出N个包之后网络断开,此时序列号为N1,N个包恰好被路由缓存,客户端重连之后发出M个包,序列号M1,M1 < N1,此时恰巧N个包被服务端收到,并发回确认N1,此时客户端才发出M1,却收到大于M1的N1确认,从而造成错误。使用递增法可以确保4小时才会产生ISN的回绕问题,后续连接基本不会与前面的连接产生冲突(意味着第一次连接也是从0开始的?),但很容易让攻击者猜测到TCP连接的ISN,现在的实现大多是在一个基准值的基础上进行随机的。
补:
如果Peer两端同时发起SYN来建立连接的时候,会出现四次握手来建立连接的情况;如果Peer两端同时断开连接,会出现两端都进入TIME_WAIT的情况,进入TIME_WAIT表示该端主动断连接;如果Server在收到Client的FIN包后,没数据需要发送给Client了,那么对Client的ACK包和Server自己的FIN包就可以合并成为一个包发送过去,这样四次挥手就可以变成三次了。

安全

也许,这样理解HTTPS更容易
补:阅读过程围绕两点,1.非对称加密算法用于协商采取何种对称密钥,所以对称密钥需有客户端生成并使用服务器的公钥加密,才能保证安全。2.是否安全可只考虑对称密钥是否会被中间人看到。文中对于数字签名的用处并不恰当,对于调包的第三方证书,因为还是第三方颁发的,所以编号检查还是可以通过的,但验证证书的发送方可能就可以察觉不是由第三方发出的。
HTTPS为什么安全 &分析 HTTPS 连接建立全过程
图解SSL/TLS协议
数字签名是什么
RSA算法原理
SSH原理与运用(一):远程登录
SSH原理与运用(二):远程操作与端口转发

防火墙

Iptables 指南 1.1.19
Iptables详解
iptables/netfilter全攻略详解

计算机组成原理资料收集

发表于 2017-08-26 | 分类于 资料收集

反码补码

计算机为什么选用二进制补码(1)—原码、反码、补码
计算机为什么选用二进制补码(2)—选用补码原因
补:
⑴ 使符号位能与有效值部分一起参加运算,从而简化运算规则。即在计算过程中,计算的对象是补码,该进位的时候就进位,无需考虑符号位。最后的结果是:补码以有符号的形式读出(计算对象是有符号数)。
⑵ 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。

1
2
3
4
5
6
e.g. 2-1 = 1(以8位为例)
2-1 = 2+(-1)
2的补码:00000010
-1的补码:10000001-->11111110-->11111111
00000010+11111111 = 000000001
以有符号的形式读出该补码

1
2
3
4
5
6
e.g. -129的存储(以8位为例)
-129 = -128+(-1)
-128的补码:10000000
-1的补码:10000001-->11111110-->11111111
10000000+11111111 = 01111111
以有符号的形式读出该补码

多道程序

两道操作系统题目—多道程序

数据库资料收集

发表于 2017-08-24 | 分类于 资料收集

基本使用

MYSQL学习心得
MySQL查询语句练习题

事务

事务并发、事务隔离级别
补:
A.丢失更新:A更新记录,B更新记录,A提交更新,B回滚,两次更新操作都丢失(回滚一个事务时,把其他事务已提交的更新数据覆盖)。
B.脏读:A更新记录,B查询记录,A回滚,B数据不真实(一个事务读到另一个事务未提交的更新数据)。
C.不可重复读:A查询记录,B更新记录并提交,A查询记录,数据变化了(一个事务读到另一个事务已提交的更新数据)。
D.覆盖更新:A更新记录并提交,B更新记录并提交,A查询更新结果,数据变化了(一个事务覆盖另一个事务已提交的更新数据)。
E.虚读(幻读):A查询结果集,B删除/添加记录并提交,A查询结果集,结果集中有以前没有的数据或者以前有的数据消失了

在上图显示的事务隔离级别可能导致的并发问题中,不可重复读和覆盖更新是针对已提交更新而言的,若B未提交更新,只有未提交读会导致并发问题。同理,幻像读是针对已提交更新而言的,若B未提交删除/添加操作,只有未提交读会导致并发问题。
可重复读的实现是对于读出的记录,添加共享锁直到transaction A结束。其它transaction B对这个记录的试图修改会一直等待直到transaction A结束。应该补充的一点是:若transaction B需要更新记录,期间transaction A需要读取记录,如果transaction B直接释放写锁,transaction A可以读取到提交的更新,这就违反了可重复读的定义,因此transaction B需要添加写锁直至事务结束(提交),之后transaction A才可以读取。简单来说,事务需要读取记录时,添加共享锁直到事务结束;事务需要更新记录时,添加写锁直到事务结束。
已提交读的实现是在transaction A中读取数据时对记录添加共享锁,但读取结束立即释放。其它transaction B对这个记录的试图修改会一直等待直到A中的读取过程结束,而不需要整个transaction A的结束。所以,在transaction A的不同阶段对同一记录的读取结果可能是不同的。transaction B事务需要更新记录时,添加写锁直到transaction B结束。
数据库事务简介
Mysql事务原理(一)
Mysql事务原理(二)
关于innodb中MVCC的一些理解
补:
MVCC主要是为了解决两个问题:写不阻塞读与读一致性。MVCC主要适用于可重复读事务级别(只能读取在它开始之前已经提交的事务对数据库的修改,在它开始以后,所有其他事务对数据库的修改对它来说均不可见)。理想的MVCC难以真正在实际中被应用,Innodb只是借了MVCC这个名字,提供了读的非阻塞而已,并没有实现核心的多版本共存,undo log中的内容只是串行化的结果,记录了多个事务的过程,不属于多版本共存。

索引

MySQL索引背后的数据结构及算法原理
补:
数据库索引使用B+树而不是红黑树的原因:
索引以文件形式存储在磁盘上->磁盘预读原理->节点大小设为一个页->确保一个节点一次I/O->节点出度大,树高度小,可减少I/O次数。
MySQL使用全文索引
位图索引

调优

陈皓 - MYSQL性能优化的最佳20+条经验
Mysql性能调优
补:
1、编码角度:存储引擎、ORM、变量代替数据库函数、批处理/预编译。
2、表字段角度:enum、NOT NULL、尽可能少列、固定长度、把IP地址存成UNSIGNED INT。
3、查询结果角度:随机行、返回必需字段、只需一行时使用limit 1、使用exists代替in。
4、查询过程角度:为搜索字段建索引、为join字段建索引、explain。

docker资料收集

发表于 2017-08-24 | 分类于 资料收集

手册

Docker入门实战

技术

陈皓 - DOCKER基础技术:LINUX NAMESPACE(上)
陈皓 - DOCKER基础技术:LINUX NAMESPACE(下)
陈皓 - DOCKER基础技术:LINUX CGROUP
陈皓 - DOCKER基础技术:AUFS
陈皓 - DOCKER基础技术:DEVICEMAPPER

golang资料收集

发表于 2017-08-24 | 分类于 资料收集

手册

The Way to Go

语言特性

Golang中的面向对象继承
补:
Go中有三种方式完成”继承“机制:1、在结构体的第一个字段匿名嵌入接口类型。2、在结构体的第一个字段匿名嵌入结构体实例。3、在结构体的第一个字段匿名嵌入结构体实例指针。
组合继承的缺点:如果B有F1和F2方法,F1调用了F2方法,A组合继承了B,并重写了F2方法。此时调用A.F1的话,不会调用到A重写的F2方法,只会调用B的F2方法。解决方法是B的F2内容抽取为F3,B定义函数变量指向F3,F2直接使用函数变量;A继承之后将函数变量指向自己的F2。
多态性:Golang不支持结构体的子类代替父类机制,但是支持接口类型的子类代替父类接口机制。

高并发

Golang适合高并发场景的原因分析

垃圾回收

知乎 - Go的垃圾回收机制在实践中有哪些需要注意的地方
Recycling memory buffers in Go

linux资料收集

发表于 2017-08-24 | 分类于 资料收集

内核

《Linux内核设计与实现》读书笔记

命令

df和du显示的磁盘空间使用情况不一致的原因及处理

ELF文件

bss、data和rodata区别与联系

堆栈

C语言申请内存时堆栈大小限制
malloc原理和内存碎片

进程线程协程

linux下进程的最大线程数、进程最大数、进程打开的文件数
《Linux内核设计与实现》读书笔记(四)- 进程的调度
多线程私有资源和共享资源
linux下C语言多线程(一)线程的创建与取消
linux下C语言多线程(二)线程的私有数据
linux下C语言多线程(三)线程同步
linux下C语言多线程(四)线程中止
linux下C语言多线程(五)杂项函数
ucontext-人人都可以实现的简单协程库
C/C++协程库libco:微信怎样漂亮地完成异步化改造
一个“蝇量级” C 语言协程库
协程分析之context上下文切换

权限

linux sticky bit 目录权限 rwt权限

同步/异步/阻塞/非阻塞

IO多路复用机制详解
聊聊同步、异步、阻塞与非阻塞
补:
从消息通知机制:同步指需要主动查询状态,异步指被动通知或回调;
从等待消息通知时的状态:阻塞指等待消息通知时被挂起,非阻塞指等待消息通知时不被挂起。
聊聊Linux 五种IO模型
select、poll、epoll之间的区别总结[整理]

系统调用

陈皓 - VFORK 挂掉的一个问题
陈皓 - 一个FORK的面试题
open与fopen对比

1234…7
zoro

zoro

如果我后退的话,我曾重视的誓言和约定就会全部消失,然后,再也不会回来这个地方了

65 日志
12 分类
18 标签
© 2020 zoro
由 Hexo 强力驱动
|
主题 — NexT.Gemini