JS数组去重最简单方法
1 | let arr = [1, 1, 2, 2] |
1 | let arr = [1, 1, 2, 2] |
不啰嗦,直接上代码
1 | /** |
1 | /** |
1 | #druid配置 |
1 | /** |
1 | /** |
1 |
|
1 | /** |
1 | /** |
我们开发任何一个Spring Boot项目,都会用到如下的启动类
1 | @SpringBootApplication |
从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱,我们要从这两位开始就可以了。
1 | @Target({ElementType.TYPE}) |
虽然定义使用了多个Annotation进行了原信息标注,但实际上重要的只有三个Annotation:
@Configuration(@SpringBootConfiguration点开查看发现里面还是应用了@Configuration)
@EnableAutoConfiguration
@ComponentScan
1 | @Configuration |
每次写这3个比较累,所以写一个@SpringBootApplication方便点。接下来分别介绍这3个Annotation。
这里的@Configuration对我们来说不陌生,它就是JavaConfig形式的Spring Ioc容器的配置类使用的那个@Configuration,SpringBoot社区推荐使用基于JavaConfig的配置形式,所以,这里的启动类标注了@Configuration之后,本身其实也是一个IoC容器的配置类。
举几个简单例子回顾下,XML跟config配置方式的区别:
1 | <?xml version="1.0" encoding="UTF-8"?> |
1 | @Configuration |
任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类。
1 | <bean id="mockService" class="..MockServiceImpl"> |
而基于JavaConfig的配置形式是这样的:
1 | @Configuration |
任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id。
1 | <bean id="mockService" class="..MockServiceImpl"> |
1 | @Configuration |
如果一个bean的定义依赖其他bean,则直接调用对应的JavaConfig类中依赖bean的创建方法就可以了。
@ComponentScan这个注解在Spring中很重要,它对应XML配置中的context:component-scan元素,@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean定义加载到IoC容器中。
我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。
注:所以SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。
个人感觉@EnableAutoConfiguration这个Annotation最为重要,所以放在最后来解读,大家是否还记得Spring框架提供的各种名字为@Enable开头的Annotation定义?比如@EnableScheduling、@EnableCaching、@EnableMBeanExport等,@EnableAutoConfiguration的理念和做事方式其实一脉相承,简单概括一下就是,借助@Import的支持,收集和注册特定场景相关的bean定义。
@EnableAutoConfiguration作为一个复合Annotation,其自身定义关键信息如下:
1 | @SuppressWarnings("deprecation") |
其中,最关键的要属@Import(EnableAutoConfigurationImportSelector.class),借助EnableAutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。就像一只“八爪鱼”一样
SpringApplication的run方法的实现是我们本次旅程的主要线路,该方法的主要流程大体可以归纳如下:
1) 如果我们使用的是SpringApplication的静态run方法,那么,这个方法里面首先要创建一个SpringApplication对象实例,然后调用这个创建好的SpringApplication的实例方法。在SpringApplication实例初始化的时候,它会提前做几件事情:
3) 创建并配置当前Spring Boot应用将要使用的Environment(包括配置要使用的PropertySource以及Profile)。
4) 遍历调用所有SpringApplicationRunListener的environmentPrepared()的方法,告诉他们:“当前SpringBoot应用使用的Environment准备好了咯!”。
5) 如果SpringApplication的showBanner属性被设置为true,则打印banner。
6) 根据用户是否明确设置了applicationContextClass类型以及初始化阶段的推断结果,决定该为当前SpringBoot应用创建什么类型的ApplicationContext并创建完成,然后根据条件决定是否添加ShutdownHook,决定是否使用自定义的BeanNameGenerator,决定是否使用自定义的ResourceLoader,当然,最重要的,将之前准备好的Environment设置给创建好的ApplicationContext使用。
7) ApplicationContext创建好之后,SpringApplication会再次借助Spring-FactoriesLoader,查找并加载classpath中所有可用的ApplicationContext-Initializer,然后遍历调用这些ApplicationContextInitializer的initialize(applicationContext)方法来对已经创建好的ApplicationContext进行进一步的处理。
8) 遍历调用所有SpringApplicationRunListener的contextPrepared()方法。
9) 最核心的一步,将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的IoC容器配置加载到已经准备完毕的ApplicationContext。
10) 遍历调用所有SpringApplicationRunListener的contextLoaded()方法。
11) 调用ApplicationContext的refresh()方法,完成IoC容器可用的最后一道工序。
12) 查找当前ApplicationContext中是否注册有CommandLineRunner,如果有,则遍历执行它们。
13) 正常情况下,遍历执行SpringApplicationRunListener的finished()方法、(如果整个过程出现异常,则依然调用所有SpringApplicationRunListener的finished()方法,只不过这种情况下会将异常信息一并传入处理)
去除事件通知点后,整个流程如下:
大部分参考了《SpringBoot揭秘快速构建为服务体系》这本书
- 玄铁重剑是神雕侠侣中杨过的兵器,外表看似笨重无比,但内在却精致有细。
- 在脚本语言和敏捷开发大行其道的时代,JavaEE的开发显得尤为笨重,这使得很多开发人员本应该如此,Spring在提升JavaEE的开发效率上从未停止过努力,SpringBoot的出现时具有颠覆性和划时代意义的。
习惯优于配置
:使用SpringBoot只需要很少的配置,在绝大部分时候我们只需要使用默认配置Spring 官方网站搭建
File–>New–>Project from Existing Sources...
Import project from external model
并选择Maven,点击Next到底为止。IntelliJ IDEA创建(强烈推荐)
在File菜单里面选择 New > Project,然后选择Spring Initializr,接着如下图一步步操作即可。
若上述步骤步骤没有出现网络错误导致的无法搭建,基本上已经没有什么问题了
根据上面的操作已经初始化了一个Spring Boot的框架了,项目结构如下:
项目里面基本没有代码,除了几个空目录外,还包含如下几样东西。
pom.xml
:Maven构建说明文件。JoylauApplication.java
:一个带有main()方法的类,用于启动应用程序(关键)。JoylauApplicationTests.java
:一个空的Junit测试类,它加载了一个使用Spring Boot字典配置功能的Spring应用程序上下文。application.properties
:一个空的properties文件,你可以根据需要添加配置属性。(还推荐一种yml文件的配置方式)我们来看pom.xml文件
1
2
3
4
5
6<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
这块配置就是Spring Boot父级依赖,有了这个,当前的项目就是Spring Boot项目了,spring-boot-starter-parent是一个特殊的starter,它用来提供相关的Maven默认依赖,使用它之后,常用的包依赖可以省去version标签。
并不是每个人都喜欢继承自spring-boot-starter-parent POM。也有可能我们需要使用的自己的公司标准parent,或者我们更喜欢显式声明所有的Maven配置。
如果不想使用spring-boot-starter-parent,仍然可以通过使用scope = import依赖关系来保持依赖关系管理:
1
2
3
4
5
6
7
8
9
10
11
12<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
该设置不允许使用spring-boot-dependencies
所述的属性(properties)覆盖各个依赖项,要实现相同的结果,需要在spring-boot-dependencies
项之前的项目的dependencyManagement中添加一个配置,例如,要升级到另一个Spring Data版本系列,可以将以下内容添加到pom.xml中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<dependencyManagement>
<dependencies>
<!-- Override Spring Data release train provided by Spring Boot -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Fowler-SR2</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Spring Boot提供了很多”开箱即用“的依赖模块,都是以spring-boot-starter-xx作为命名的。举个例子来说明一下这个起步依赖的好处,比如组装台式机和品牌机,自己组装的话需要自己去选择不同的零件,最后还要组装起来,期间有可能会遇到零件不匹配的问题。耗时又消力,而品牌机就好一点,买来就能直接用的,后续想换零件也是可以的。相比较之下,后者带来的效果更好点(这里就不讨论价格问题哈),起步依赖就像这里的品牌机,自动给你封装好了你想要实现的功能的依赖。就比如我们之前要实现web功能,引入了spring-boot-starter-web这个起步依赖。我们来看看spring-boot-starter-web到底依赖了哪些,如下图:
main
方法mvn spring-boot:run
在命令行启动该应用,IDEA中该命令在如下位置mvn package
进行打包时,会打包成一个可以直接运行的 JAR 文件,使用java -jar
命令就可以直接运行上面的截图是我安装好之后界面,安装的是MATE桌面
groups
是Centos7才有的命令登录服务器,执行命令安装桌面环境(537M)
1 | yum groups install "MATE Desktop" |
安装好MATE Desktop 后,再安装X Window System(19M)
1 | yum groups install "X Window System" |
1 | systemctl set-default graphical.target |
1 | reboot |
在ECS控制台,用管理终端登录服务器,进入到服务器系统登录界面,用root密码登录服务器。
1 | yum groupremove 'X Window System' -y |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
////////////////////////////////////////////////////////////////////
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永无BUG //
////////////////////////////////////////////////////////////////////
systemctl status firewalld
systemctl start firewalld
systemctl disable firewalld
systemctl restart firewalld.service
firewall-cmd --zone=public --add-port=80/tcp --permanent
systemctl stop firewalld
firewall-cmd --list-ports
ps -ef |grep tomcat
kill -9 pid
可以强制杀死tomcat的进程top
(停止刷新 -q
)free
rm -rf /var/lib/mysql
find / -name filename
unzip file.zip
,相反的,压缩文件 zip file (需安装yum install unzip zip
,),解压到指定目录可加参数-d,如:unzip file.zip -d /root/
zip test.zip test.txt
,当然也可以指定压缩包的目录,例如 /root/test.zip ,后面的test.txt也可以换成文件夹yum install p7zip
安装7z解压,支持更多压缩格式(卸载yum remove p7zip
)mkdir /data/blank
rsync–delete-before -d /data/blank/ /var/spool/clientmqueue/
touch /data/blank.txt
rsync-a –delete-before –progress –stats /root/blank.txt /root/nohup.out
netstat -tunpl | grep 6379
(注意,redis服务需要 root 权限才能查看,不然只能检查到6379被某个进程占用,但是看不到进程名称。)hostnamectl set-hostname 新主机名
yum check-update
yum update
yum install <package_name>
yum update <package_name>
yum list
yum remove <package_name>
yum search <keyword>
yum clean packages
: 清除缓存目录下的软件包yum clean headers
: 清除缓存目录下的 headersyum clean oldheaders
: 清除缓存目录下旧的 headerssystemctl restart nginx
: 重启nginxsystemctl start nginx
: 开启nginxsystemctl stop nginx
: 关闭nginxsystemctl enable nginx
: nginx开机启动systemctl disable nginx
: 禁用nginx开机启动systemctl status nginx
: 查看nginx服务信息systemctl is-enabled nginx
: 查看服务是否开机启动systemctl list-unit-files|grep enabled
: 查看已启动的服务列表systemctl --failed
: 查看启动失败的服务列表systemctl daemon-reload
: 重新加载service文件systemctl reboot
: 重启systemctl poweroff
: 关机备份 :mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载新的CentOS-Base.repo 到/etc/yum.repos.d/
1 | ## CentOS 5 : |
注: 以上命令在安装 elasticsearch 时都会用的到
vim 永久显示行号 vim /etc/vimrc 添加 set nu
或者 set number
最小化安装 centos 是没有 tab 键补全提示的, 需要安装 yum install bash-completion
tab 补全提示不区分大小写 : vim /etc/inputrc 添加 set completion-ignore-case on
注: 以上 增加配置是全局的,只对当前用户的话,可以在当前目录下新建相应的文件,再添加配置,例如: ~/.inputrc
libSM.so.6: cannot open shared object file: No such file or directory
yum provides libSM.so.6
来寻找包含的动态库1 | Loaded plugins: fastestmirror |
找到后安装即可 yum install gperftools-libs
/dev/null 2>&1
解释>
覆盖原来的内容>>
在原来的内容上追加新的内容使用<或<<
使用>或>>
使用2>或2>>
>/dev/null 2>&1
即错误输出与标准输出全部重定向到空,可以写成 1>/dev/null 2>/dev/null
&
代表该命令在后台运行, shell 的控制台会立即释放,但是和守护进程又不一样, shell 断开会终止运行command > file.log 2>&1
等价于 command 2>file.log 1>&2
前一个指的是标准错误重定向到标准输出,标准输出在重定向到文件 file.log 中, 其中 1 省略了;后一个指的是标准输出重定向到标准错误,标准错误又重定向到文件 file.log, 其中2 不能省略#!/usr/bin/env bash
或者 #!/usr/bin/bash
或者 #!/bin/bash
ln -s command /usr/bin/command
, 参数 -s 创建了个符号链接,相当于快捷方式,不加参数 -s 就是创建硬链接,相当于文件拷贝没有联网的机器做时间服务器,写了个接口获取网络的时间,然后服务器使用 crontab 定时设置时间
java:
1 | /** |
shell:
1 | #!/usr/bin/env bash |
1 | sed -i "108c 'update content'" filename |
dpkg --get-selections|grep linux
: 查看全部安装的内核sudo apt remove linux-headers-4.15.0-43 linux-headers-4.15.0-43-generic linux-image-4.15.0-43-generic linux-modules-4.15.0-43-generic linux-modules-extra-4.15.0-43-generic
deinstall
的状态deinstall
状态的内核: sudo dpkg -P xxxxxx
Java
和Tomcat
的运行环境,后续将接着搭建Mysql,Git,Nginx,Redis,Docker…环境1.在/usr/目录下创建java目录
1 | [root@JoyLau ~]# mkdir/usr/java |
2.官网下载jdk,拷贝到服务器上,然后解压
1 | [root@JoyLau java]# tar -zxvf jdk-8u121-linux-x64.gz |
3.设置环境变量
1 | [root@JoyLau java]# vi /etc/profile |
4.在profile中添加如下内容:
1 | #set java environment |
5.让修改生效:
1 | [root@JoyLau java]# source /etc/profile |
6.验证
1 | [root@JoyLau ~]# java --version |
还有2中方法可以安装jdk:
yum
安装jdkUbuntu
上使用apt-get
安装jdk注意的是默认安装的只是 Java JRE,而不是 JDK,为了开发方便,我们还是需要通过 yum 进行安装 JDK
yum install java-1.8.0-openjdk-devel.x86_64
之后就可以直接使用 Java javac 命令了
配置 JAVA_HOME变量:
vim ~/.bashrc
在文件最后面添加如下单独一行(指向 JDK 的安装位置),并保存:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
接着还需要让该环境变量生效,执行如下代码:
source ~/.bashrc # 使变量设置生效
设置好后我们来检验一下是否设置正确:
echo $JAVA_HOME # 检验变量值
java -version
$JAVA_HOME/bin/java -version # 与直接执行 java -version 一样
如果设置正确的话,$JAVA_HOME/bin/java -version 会输出 java 的版本信息,且和 java -version 的输出结果一样
配置catalina.sh,加入以下配置
1 | #add JAVA and TOMCAT config |
增加tomcat.service在/usr/lib/systemd/system
目录下增加tomcat.service
,目录必须是绝对目录。
1 | [Unit] |
systemctl enable tomcat
systemctl start tomcat
systemctl stop tomcat
systemctl restart tomcat
startup.sh
没有权限,你知道该怎么做的~~https://repo.mysql.com//mysql57-community-release-el7-9.noarch.rpm
安装命令
1 | # wget https://repo.mysql.com//mysql57-community-release-el7-9.noarch.rpm |
安装过程中有确认操作,一律y
接下来就是漫长的下载,只需要等待即可。
systemctl start mysqld
启动mysqld服务/var/log/mysqld.log
里的日志(可以查找password关键字)mysql -u root -p
You must reset your password using ALTER USER statement before executing this statement.
alter user 'root'@'localhost' identified by 'root'
命令,修改 root 用户的密码为 root,注意修改的密码不能过于简单将所有权限赋给root用户并提供外网访问
1 | grant all privileges on *.* to root@'%'identified by 'root'; |
紧接着就可以在自己的机器上用Navicat了
配置my.cnf:/etc/my.cnf
1 | [mysqld] |
yum remove mysql mysql-server mysql-libs mysql-server;
rpm -qa|grep mysql
(查询出来的东西yum remove掉)find / -name mysql
(将找到的相关东西delete掉;)show variables like 'character%';
可以看到数据库的编码方式其中,character_set_client为客户端编码方式;
character_set_connection为建立连接使用的编码;
character_set_database数据库的编码;
character_set_results结果集的编码;
character_set_server数据库服务器的编码;
只要保证以上四个采用的编码方式一样,就不会出现乱码问题。
redis-3.2.8.tar.gz
tar -zxvf redis-3.2.8.tar.gz
cd redis-3.2.8/src
make
编译make intsall
,因为该操作会把编译生成的**重要的文件**拷贝到user/local/bin
下,我们想要自定义配置路径中间可能报/bin/sh: cc:未找到命令
,对于这样的情况只需要
1 | yum install gcc |
这里的重要文件指的是下图所示的8个文件,在redis以前版本好像是7个文件(没具体试过)
注意文件和文件夹的权限
ls
查看src下的文件,你会看到有些文件是绿色的,这些事重要的文件,也正是我们所需要的,我们将这些文件单独存下来redis.conf我只修改了以下配置
port
: 端口requirepass
密码bind 0.0.0.0
: 配置外网可访问daemonize yes
: 将redis服务作为守护进程,作为开机启动有了基本配置,redis还需要有一个管理启动、关闭、重启的一个脚本。redis源码里其实已经提供了一个初始化脚本redis_init_script
,这是我的配置
1 | #!/bin/sh |
头部的chkconfig的添加是为了保证chkconfig redis on
能够执行
接着将redis_init_script脚本拷贝到**/etc/init.d/redis**,这里重命名为redis
1 | # cp /project/redis-3.2.8/utils/redis_init_script /etc/init.d/redis |
现在还缺一个系统启动时的配置:chkconfig redis on
执行之后,redis便是以系统服务启动、关闭了
1 | systemctl start redis; |
anonymous_enable=NO
: 不允许匿名用户登录chroot_local_user=YES
: 用户不能跳出当前的 home 目录首先 selinux 会默认拦截 vsftp,想要不被拦截的话,可以关闭 selinux, 但是关闭后安全性得不到保障,可能会出现其他的问题,这里我们不关闭,可以开放权限
1 | setenforce 0 #暂时让SELinux进入Permissive模式 |
这时 selinux 已经开放了 vsftpd 的权限
给 ftp 用户的 home 目录赋予写的权限 chmod a+w /var/ftp
vsftpd 在新版本时,如果检测到用户不能跳出当前的 home 目录,那么用户的 home 不能有写的权限,会报 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 错误,这时就尴尬了
解决方式: 在配置文件中添加: allow_writeable_chroot=YES
重启 vsftpd
使用 FTP 工具连接失败,报如下错误:
1 | 状态: 连接建立,等待欢迎消息... |
解决方法: 找到 /etc/pam.d/vsftpd
注释掉 #auth required pam_shells.so
1 | docker run -d --name ftp-server --restart always -p 6106:21 -p 6107:20 -p 6108-6109:21100-21101 -v /data/etc-service-data/nginx-data/data/ftp:/home/vsftpd -e PASV_ADDRESS=112.29.246.234 -e FTP_USER=ky -e FTP_PASS='Kaiyuan@2020' -e PASV_MAX_PORT=21101 fauria/vsftpd |
unable to connect to epmd (port 4369) on 68: badarg (unknown POSIX error)
, 这时在文件中 /etc/rabbitmq/rabbitmq-env.conf
写入 NODENAME=rabbit@localhost
保存重启.yum install mariadb-server
mysql -uroot -p
, 第一次登陆是 root 用户没有密码,直接进入即可mysql_secure_installation
,可以设置 root 密码,移除匿名账号等等…mysql -uroot -p
登录GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;
授权 root 账户,密码 123456flush privileges;
MariaDB的默认编码是latin1,插入中文会乱码,因此需要将编码改为utf8
首先设置数据库的编码都为 utf8
SHOW VARIABLES LIKE 'character%';
查看编码[client]
里加入 default-character-set=utf8
[mysqld]
里加入 character-set-server=utf8
systemctl restart mariadb
重启生效SHOW VARIABLES LIKE 'character%';
查看编码建库,建表,表里的 varchar 字段的字符集都用 utf8
, 排序规则都用 utf8_unicode_ci
至此服务端就配置完成了
连接数据配置文件,加上参数
1 | datasource: |
yum install bind
安装完成后服务名为 named
vim /etc/named.conf
1 | options { |
listen-on port 53 { 127.0.0.1; };
# 指定服务监听的端口,建议写本机IP,减少服务器消耗allow-query { any; };
# 允许哪些客户端访问DNS服务,此处改为“any”,表示任意主机
修改这2项配置即可
include "/etc/named.rfc1912.zones";
# include代表该文件是子配置文件
vim /etc/named.rfc1912.zones
, 添加一个我们自定义的域名配置,这里我使用的是 baidu.com
1 | zone "baidu.com" IN { |
上述文件默认的目录在 /var/named/data
目录下
vim /var/named/data/baidu.com.zone
配置如下: 注意格式
1 | $TTL 1D |
注意第一条记录 ns.baidu.com.
的解析必须添加否则会报错,添加之后,再加一条 ns 子域名的解析,直接指向自己即可
这里附上一些配置的解释:
chown root:named baidu.com.zone
修改权限systemctl restart named
yum 安装的版本可能比较低,对于一些应用来说可能不好,这里使用官网的安装包
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql10
, yum install postgresql10-server
/usr/pgsql-10/bin/postgresql-10-setup initdb
systemctl enable postgresql-10;systemctl start postgresql-10
数据库的默认管理员用户是 postgres, 在 PostgreSQL 安装好后会创建用户 postgres
su postgres
psql
登陆数据库ALTER USER postgres WITH PASSWORD 'postgres';
postgresql.conf
文件的 listen_address = *
pg_hba.conf
添加 host all all 0.0.0.0/0 password
一行说明:
/usr/lib/systemd/system/postgresql-10.service
的 PGDATA
systemctl daemon-reload
postgresql-step initdb
初始化数据库,遇到权限问题,先创建好目录xvdb
和 vdb
分别对应非 I/O优化I/O 优化;非 I/O 优化和 I/O 优化的区别在于,前者比后者多一个字母 xfdisk -l
命令查看数据盘。注意:在没有分区和格式化数据盘之前,使用 df -h
命令是无法看到数据盘的。在下面的示例中,有一个 5 GB 的数据盘需要挂载。fdisk -l
命令后,没有发现 /dev/xvdb,则表示您的实例没有数据盘,因此无需挂载fdisk /dev/xvdb
,对数据盘进行分区。根据提示,依次输入 n,p,1,两次回车,wq,分区就开始了。fdisk -l
命令,查看新的分区。新分区 xvdb1 已经创建好。如下面示例中的/dev/xvdb1。一般情况下我都是直接格式化一整块数据盘,然后挂载的。
mkfs.ext3 /dev/xvdb1
,对新分区进行格式化。格式化所需时间取决于数据盘大小。您也可自主决定选用其他文件格式,如 ext4
等。echo /dev/xvdb1 /mnt ext3 defaults 0 0 >> /etc/fstab
写入新分区信息。完成后,可以使用 cat /etc/fstab
命令查看。Ubuntu 12.04 不支持 barrier,所以对该系统正确的命令是:
echo /dev/xvdb1 /mnt ext3 defaults 0 0 >> /etc/fstab
如果需要把数据盘单独挂载到某个文件夹,比如单独用来存放网页,可以修改以上命令中的 /mnt 部分。
运行 mount /dev/xvdb1 /mnt
挂载新分区,然后执行 df -h
查看分区。如果出现数据盘信息,说明挂载成功,可以使用新分区了。
1 | mount /dev/xvdb1 /mnt |