linux下各数据库安装及相关知识

这一部分主要讲mysql , mongodb 和 redis的安装和相关操作。这三个在我的程序中都有用到,分别代表了关系型数据库,非关系型数据库,内存key-value数据库

1. MySQL


1.1 安装

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install mysql-server
$ sudo apt-get install mysql-client

在安装的时候会提示你要输入密码什么的,按照提示来就行了

1.2 数据库备份,导出和导入

我原先的打算是最好能够让win和linux下的mysql公用一个存储文件,这样在两个系统上可以同步使用数据,而不需要同步。不过在反复尝试以后发现并不行,因此只能按照网上的方法,现将win下的数据使用mysqldump拷贝出来,然后在linux下导入。
具体的流程如下:

一. 导出
首先进入win, 确认此时mysqld进程已经开启,然后输入

mysqldump -u root --default-character-set=utf8 DB_NAME > DB_PACK_PATH

在上述命令中,-u root 表示登陆的用户
--default-character-set=utf8是一个可选参数,表示使用的字符集
最后的DB_NAME表示要导出的database名字,DB_PACK_PATH是目标文件路径,其中后缀名是随意的
如果只想要导出db中的某个表,则可以

mysqldump -u root --default-character-set=utf8 DB_NAME TABLE_NAME > DB_PACK_PATH

注意,上述操作一定要在cmd中运行,而不可在powershell中运行!在ps中导出的文件在导入的时候会提示ascii码错误什么的。

二. 导入
此时进入linux系统,首先进入mysql, 然后建立对应的database. 比如说,我想导入一个名字叫microblog的库,则首先要create database microblog建立对应的空白数据库
如果对于数据库的字符集有特定的要求,可以输入show create database DB_NAME;来查看编码。

这里写图片描述

如果想修改,可以使用alter database DB_NAME default character set utf8;
之后,使用use DB_NAME ;进入对应的数据库, 然后使用source DB_PATH ; 来导入。这种方法的原理就是一条条insert. 据说mysqldump -u root -p DB_NAME < DB_PACK_PATH速度会很快,不过我并没有试过。

1.3 GUI

一开始打算用的navicat, 不过始终出现乱码,又要破解,感觉很烦,就用了mysql官方推荐的WorkBench, 感觉还是很好用的。
下载地址是http://dev.mysql.com/downloads/workbench/ 是一个deb包,下完以后使用dpkg -i PACK_NAME安装,如果报错,则执行apt-get -f install以后再装一次即可

1.4 数据库迁移

所谓数据库迁移,就是指更换数据库的数据的位置。有时候磁盘空间有限,难免想要将数据挪到其他盘里去。而在提具体步骤之前,首先要提一下mysql中的几个关键文件的位置(5.7.13-0ubuntu0.16.04.2)。

这里写图片描述

这些信息都是可以自己修改的。当然了,就目前目标而言,我们主要关注datadir的值。datadir, 顾名思义,就是存放数据的文件夹的路径。可以看到,默认的datadir = /var/lib/mysql 。你可以把datadir改成自己的目标文件夹。
当然了,修改完datadir以后并不是万事大吉了,因为datadir中本身就有一些必要的相关信息,所以要将原来的datadir中的内容拷贝到目标文件夹(也就是新的datadir)中。
也许你觉得这样就已经结束了。但是如果这时你重新启动mysql, 会提示报错,因为mysql无法访问新的datadir。 这是由于AppArmor的存在。 AppArmor是一个高效和易于使用的Linux系统安全应用程序。简单的来讲,它能够控制各软件能够访问的文件范围。AppArmor的参数文件在/etc/apparmor.d中,里面包含了各app的相关参数。至于mysql,则在usr.sbin.mysqld中。找到

# Allow data dir access
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,

将那两个路径替换掉,改成目标文件夹的路径即可。当然了,也可以不替换,在下面补充新的路径也是可以的。
修改完配置文件后,运行

$systemctl restart apparmor
$systemctl restart mysql

重启AppArmor和mysql。 到此才正式完成迁移数据文件夹的步骤

相关资料链接:
MySQL如何修改表格的字符集,如何修改某个字段的字符集
将mysql数据从Windows迁移到Linux中


1.5 参数调优

这里主要参照之前博客的做法, 调节innodb相关的一些参数。
mysql的参数可以通过show variables;来查看。而show variables like "%inno%";可以查看与名字中带有innodb的变量。参数的位置依旧在 /etc/mysql/mysql.conf.d

这里写图片描述


1.6 报错的解决办法

1.6.1 open-files-limit相关

在运行服务器端的过程中,很奇怪的,在IDEA中就可以正常运行,而在shell中跑就会报错。报的错误是MySQL can't open files after updating server: errno: 24 这个错误经过查询后发现,与以下因素有关:

  1. mysql 自身的 open_files_limit 参数
  2. ulimit 中的 open files 参数

前者是mysql自身的约束,而后者是linux系统的约束。

首先来看前者,mysql 的 open_files_limit 值可以登陆客户端(mysql -u root -p)以后使用
show global variables like "%open%" ;
来查看,一般来讲是1024,有时候是不够用的。想要修改这个值,需要进入/etc/mysql/mysql.conf.d/mysqld.cnf 中修改。直接在[mysqld]项下添加
open_files_limit = 65535
即可。也可以在/etc/mysql/my.cnf中添加。默认情况下,这个文件是空的,需要自己加[mysqld]字段,然后再添加参数,如下图所示
这里写图片描述
使用systemctl restart mysql重启以后生效

接下来来看ulimit. ulimit是linux内置的一个应用,能够控制各个用户的一些参数,例如能够打开的文件数,进程数,堆栈的值等等。可以通过 ulimit -a来查看所有内容。注意查询所得结果根据用户是不同的,是否是root用户也可能得到不同的结果。
使用 ulimit -key value 可以临时的改变这些值,比如说ulimit -n 5000就可以将能够同时打开的文件改成5000, 但是只对当前shell有效。想要永久的改变该值,需要去/etc/security/limits.conf中去修改。
这里写图片描述
修改完以后,重启系统或reboot生效。

相关资料链接:
mysql open_file_limits相关设置
mysql非root启动解除文件句柄的1024限制的注意事项
正确配置Linux系统ulimit值的方法
mysql优化之连接优化(open-files-limit与table_open_cache)
How to permanently raise ulimit ‘open files’ and MySQL ‘open_files_limit’

相关资料

2. MongoDB

apt-get install mongodb
参数文件在/etc/mongodb.cnf中,可以修改datadir和port等信息
gui: 推荐mongobooster

3. Redis

3.1 安装

按照官网的说法,

$ wget http://download.redis.io/releases/redis-3.2.3.tar.gz
$ tar xzf redis-3.2.3.tar.gz
$ cd redis-3.2.3
$ make

编译得到的二进制文件在src中
打开服务器端

$ src/redis-server 

打开客户端

$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值