linux安装+使用总结篇(*****)

 

 

1、快速更改国内yum源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup   #<<-备份系统自带yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo <<—国内使用阿里云yum源速度比较快
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum makecache
 

2、安装必要的软件工具

yum install lrzsz systat tree vim nmap unzip dos2unix nc lsof
yum groupinstall "Development Tools"
yum groupinsll "x software development"
 

3、清理开机自启动服务

1
2
chkconfig|egrep -v "crond|sshd|network|rsyslog|sysstat"|awk '{print "chkconfig",$1,"off"}'|bash <<-关闭服务
chkconfig --list|grep 3:on <<-检查开机启动的服务
 

4、更改ssh登录配置

Port 52113 #端口
PermitRootLogin no #禁止root登录
PermitEmptyPasswords no #禁止空密码登录
UseDNS no #不适用dns,对远程主机进行反向解析,会减慢ssh连接速度
ListenAddress #监听指定的IP地址
 

5、将需要的普通用户加入到sudo权限里

[root@model ~]# visudo #等于 vim /etc/sudoers 两者修改的是同一个文件

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zxin10 ALL=(ALL) ALL
 

6、解决普通用户命令找不到的问题
普通用户与root环境变量一致

#修改各个用户的

echo "export PATH=$PATH:/usr/sbin/:" >> ~/.bash_profile
source ~/.bash_profile 得生效

 

7、配置字符集

linux中文显示设置

GBK用2个字节表示一个中文,UTF-8用3个字节表示一个中文

使用secureCRT可以设置编码格式,必须和系统设置的一样
Option--Session Option--Appearance
选项--会话选项--外观-- 字符编码
修改系统:

cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori
echo 'LANG="zh_CN.UTF-8"' >/etc/sysconfig/i18n 
source /etc/sysconfig/i18n
echo $LANG
 

8、同步系统时间
yum -y install ntpdate
which ntpdate    ------> /usr/sbin/ntpdate  #ntpdate命令的全路径输出

加入到定时任务里面去:

echo '#time sync by mmod at 2015-2-1' >>/var/spool/cron/root
echo '*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root
crontab -l
 

9、关闭SElinux,iptables,NetworkManager

sed -i 's/SELINUX=enforcing/SELINUX=disabled' /etc/selinux/conf # 直接修改读取内容而不输出到终端
reboot
 

10、五个企业环境中开机自启动的服务;

sshd:远程连接linux服务器必须开启
rsyslog:日志相关软件
network:网络服务
crond:系统和用户配置的计划任务周期性进行
sysstat:收集系统性能数据,有利于判断系统是否正常
 

设置开机自启动服务的常见方法
方法一:ntsysv
方法二:setup
方法三:
chkconfig|egrep -v "crond|sshd|network|rsyslog|sysstat"|awk '{print "chkconfig",$1,"off"}'|bash

 

11、加大服务器文件描述符
#查看limit
[root@model ~]# ulimit -n
1024
#修改配置文件
echo '* - nofile 65535' >/etc/security/limits.conf

#加入开机自启动该命令:
echo "ulimit -HSn 65535" >> /etc/rc.local

echo "fs.file-max = 100000" >>/etc/sysctl.conf 


12、修改内核参数
两种修改内核参数方法:
12.1、使用echo value方式直接追加到文件里如echo "1" >/proc/sys/net/ipv4/tcp_syn_retries,但这种方法设备重启后又会恢复为默认值
12.2、把参数添加到/etc/sysctl.conf中,然后执行sysctl -p使参数生效,永久生效,老男孩推荐参数:
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 32768
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_wmem = 8192 131072 16777216
net.ipv4.tcp_rmem = 32768 131072 16777216
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_conntrack_max = 65536
net.ipv4.netfilter.ip_conntrack_max=65536
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384

sysctl -p

 

 

 


选配部分:
-----------------------------------------------------------------------------------

1、定时清理邮件服务临时目录垃圾文件

•Centos 5
find /var/spool/clientmqueue/ -type f |xargs rm -f
•Centos 6
find /var/spool/postfix/maildrop -type f |xargs rm -f
#df -i 查看磁盘inode的总量、使用量、剩余量


2、锁定关键系统文件,防止被提权篡改
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab

使用lsattr 进行查看,chattr -i进行解锁
禁止linux系统被ping

3、为了增加系统的安全性。可以禁止我们的linux系统被ping,可惜修改iptables来设置
echo 'net.ipv4.icmp_echo_ignore_all=1' >> /etc/sysctl.conf
sysctl -p 重载信息并更新启动

如果要恢复:
> /etc/sysctl.conf
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all


4、隐藏系统版本还版本号
vim /etc/issue修改文件
>/etc/issue 清空
echo "">/etc/redhat.release


5、升级软件安装漏洞 yum install openssl openssh bash -y

 

 


配置实例:

centos7系统安装完成后一些基本的优化

一:主机名和hosts文件
centos7有一个新的修改主机名的命令hostnamectl
# hostnamectl set-hostname --static li.cluster.com
# vim /etc/hosts --最后加上你的IP与主机名的绑定
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.13.250 li.cluster.com li

二:关闭iptables
# systemctl status firewalld.service --查看firewalld服务的状态,active是启动状态,inactive是关闭状态
# systemctl stop firewalld.service --关闭此服务
# systemctl list-unit-files |grep firewalld --查看firewalld是否开机自动启动
firewalld.service enabled

# systemctl disable firewalld.service --类似以前的chkconfig xxx off
# systemctl list-unit-files |grep firewalld
firewalld.service disabled

三:关闭selinux
# sed -i 7s/enforcing/disabled/ /etc/selinux/config --改完后,在后面重启系统生效

四:网络配置
# systemctl stop NetworkManager --停止服务
# systemctl status NetworkManager --查看状态,确认为关闭了
# systemctl disable NetworkManager --设置为开机不自动启动
# vim /etc/sysconfig/network-scripts/ifcfg-enp2s0 --网卡名如果不一样,找到对应的文件就行
BOOTPROTO="static"
NAME="enp2s0"
DEVICE="enp2s0"
ONBOOT="yes"
IPADDR=172.16.13.X
NETMASK=255.255.255.0
GATEWAY=172.16.13.254
DNS1=114.114.114.114
# /etc/init.d/network restart --network服务这里默认还是可以使用原来的管理方法
# chkconfig network on

五:yum配置
# cd /etc/yum.repos.d/
# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo


配置可选epel源
# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-10.noarch.rpm --此版本信息会随时间推移而变化
# rpm -ivh epel-release-7-10.noarch.rpm
# yum clean all
# yum makecache fast

六:输入法配置
默认只有拼音中文输入法,需要使用极点五笔输入法,安装过程如下:
# yum install ibus ibus-table-chinese-wubi-jidian
安装完后,需要右上角把用户注销重登录
左上角applications--system tools -- settions -- Region & Language -- +或-你的输入法就可以了
加完之后,使用super+space键进行切换

七:时间同步
# yum install ntp ntpdate --安装ntp时间同步相关软件包
# vim /etc/ntp.conf --确认配置文件里有下列的时间同步源
server 0.rhel.pool.ntp.org iburst
server 1.rhel.pool.ntp.org iburst
server 2.rhel.pool.ntp.org iburst
server 3.rhel.pool.ntp.org iburst
# systemctl enable ntpd --设置开机自动启动ntpd
# systemctl start ntpd --立即启动ntpd服务
# date --确认时间与现在时间一致
# ntpdate 0.rhel.pool.ntp.org --如果还没有同步成功,你可以用此命令手动同步一下

 

八:有些命令的参数可以自动补全,如果不能补全,则安装下面的命令(可能需要注销一下)
# yum install bash-completion

九:vnc的配置
# vncpasswd --设定vcn连接的密码
Password:
Verify:
# x0vncserver --PasswordFile=/root/.vnc/passwd --AlwaysShared=on --AcceptKeyEvents=off AcceptPointerEvents=off &> /dev/null &

十:桌面锁屏
左上角applications--system tools -- settions -- Privacy 设置是否自动锁屏
手动锁屏
super+l

十一:图形界面快捷键修改
左上角applications--system tools -- settions -- Keyboard -- Shortcuts 去修改自己习惯的快捷键

十二:设置默认启动级别为图形模式(相当于以前的5级别)
# systemctl get-default --查看当前的运行模式
# systemctl set-default graphical.target --设置图形模式为默认模式

 

 

 

ulimit(选项)
选项
复制代码
-a:显示目前资源限制的设定;
-c <core文件上限>:设定core文件的最大值,单位为区块;
-d <数据节区大小>:程序数据节区的最大值,单位为KB;
-f <文件大小>:shell所能建立的最大文件,单位为区块;
-H:设定资源的硬性限制,也就是管理员所设下的限制;
-m <内存大小>:指定可使用内存的上限,单位为KB;
-n <文件数目>:指定同一时间最多可开启的文件数;
-p <缓冲区大小>:指定管道缓冲区的大小,单位512字节;
-s <堆叠大小>:指定堆叠的上限,单位为KB;
-S:设定资源的弹性限制;
-t <CPU时间>:指定CPU使用时间的上限,单位为秒;
-u <程序数目>:用户最多可开启的程序数目;
-v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。
复制代码
 

在我的centos 6.3 32位系统输入 ulimit -a 结果如下



 

ulimit -n

问题: Can’t open so many files 对于linux运维的同学们,相信都遇到过这个问题。
在Linux下一切资源皆文件,普通文件是文件,磁盘打印机是文件,socket 当然也是文件。系统默认设置成1024,但是这个数字对于服务器特别是大并发的远远是不够的,所以,我们需要结合实际情况修改成一个更大更合理的值。

修改方法

vim /etc/security/limits.conf

1
2
3
# 确认包含下面的内容:
* soft nofile 65536
* hard nofile 65536
 

保存,然后重启
注:65536 是我这边的设定值,读者也可以自行设置一个合适的值,* 代表针对所有用户
同时还有个要注意的值 file-max 是设置 系统所有进程一共可以打开的文件数量 ,可以通过如下方法进行修改
echo 100000 > /proc/sys/fs/file-max
或修改 /etc/sysctl.conf, 加入
fs.file-max = 100000 重启生效

另外还有一个,/proc/sys/fs/file-nr,可以看到整个系统目前使用的文件句柄数量

ulimit -u
比如我们在模拟大规模http并发测试的时候,客户端会报一个无法fork new proc异常,原因是受到了最大进程1024的限制
解除 Linux 系统的最大进程数
方法如下
vim /etc/security/limits.d/90-nproc.conf

1
2
3
# 添加如下的行
*          soft    nproc     10240
root       soft    nproc     unlimited
 
Linux安装好系统后优化

 

Linux之基础命令
常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
查看ip地址的两种方式
ifconfig
ip addr show
Linux的两种ip地址:
  127.0.0.1  本机回环地址
  0.0.0.0    全网地址/绑定所有网卡/所有地址
 
Linux远程连接,连接本地虚拟机服务器
windows默认没有ssh命令,可以通过安装xshell 获取ssh命令
ssh 用户名@服务器ip
 
Linux的目录分割符  /
windows的目录分割符 \
 
超级用户的家目录 /root
普通用户的家目录 /home
 
超级用户的命令提示符[root@bogon ~]#
普通用户的命令提示符[root@bogon ~]$
文件的增删改查
复制代码
增
创建文件夹
       mkdir   文件名
创建文本文件
       touch    text.txt
       touch    .text.txt   # 创建隐藏文件
递归创建文件夹
    mkdir -p  ./20期/{demo1,demo2,demo3} 【在当前目录下创建一个文件夹名为20期,在20期里创建了这三个子文件夹】
复制代码
复制代码
删
删除文本文件
       rm text.txt
       rm -r 文件名
       -r  【递归删除文件和文件夹】
       -f  【强制删除不提示】
          #上面两种删除文件的方式都会又询问你是否要删除
       rm -rf 文件名     # 强制删除不提示(慎用)
复制代码
改
修改文件名
        mv   旧文件名   新文件名      # 文件和文本一样
移动文件
        mv   你想移动的文件   你要移动到的目录 
复制代码
查
ls      【查看当前目录下的所有文件】
ls -l   【查看当前目录详细信息(权限)】
ls -l /tmp 【查看指定文件下的文件信息】
ls -lh  【查看文件大小显示M/G】
ls -a   【查看当前目录下的所有文件包括隐藏文件】
cat     【查看文本内容】
cat -n  【查看文本内容显示行号】
.       【当前目录】
..      【上一级目录】
复制代码
其他命令
复制代码
绝对路径:只要从根目录开始的路径写法,都是绝对路径
    ls    /opt
相对路径:只要不是根目录开头,那就是个相对路径
    ls   ../tmp

~    【当前登录用户的家目录 】

-    【返回上一次的工作目录】    cd-

man     【查看帮助信息 man 命令 Q退出帮助  man mkdir】
clear   【清空当前屏幕信息】
pwd     【当前所在目录】
whoami  【查看当前登录的用户】
who     【查看所有登陆用户】
cal     【查看日历】
date    【查看当前时间】
useradd 【创建用户】  password 【设置密码】
su - 用户名 【切换用户】
sudo su -  【切换到超级用户】
help    【查看帮助信息】useradd --help 【查看useradd的帮助信息】
echo    【相当于打印,输出到屏幕上】
>       【覆盖写】 echo "hello">text.txt
>>      【追加写】 echo "word">>text.txt 
<<      【数据追加写入符】
<       【数据写入】
复制代码
1
2
3
4
5
6
7
cat >file2 <<EOF
> 555
> 666
> 777
> EOF
 
# EOF 文件的头尾符号 开始和结束
vim
1
2
3
4
5
6
7
8
9
10
1、打开文件        【vim 文件名】
2、进入编辑模式  【按i进入插入模式】
3、写代码
4、退出编辑模式  【esc退出编辑模式】
5、退出vim编辑器【:wq!】
输入冒号进入底线编辑模式
:w!  强制写入不退出
:q!  不保存强制退出
 
编码问题:linux系统内置的是py2,如果我们需要写入中文,需要在文件开头定义#!coding:utf8


复制代码
vim编辑器

命令行模式:

1:a/i/o 进入插入模式;

2:dd 删除光标所在的那一行;

3:ndd n为数字,删除光标所在的向下n行  20dd表示删除20行;

4:yy 复制光标所在的那一行;

5:nyy n为数字,复制光标所在的向下n行  20yy表示复制20行;

6:u 复原前一个操作;

7:ctrl + r 重做上一次操作;

8:yy -> 1000p   复制10000行;

9:dd -> p   剪切操作;

10:p 将已复制数据粘贴到光标的下一行;

11:P 将已复制数据粘贴到光标的上一行;

12:shift + $ 跳到行尾 ,0跳到行首;

13:gg 跳到文件的开头,G跳到文件的结尾,nG n为数字,跳到光标所在的向下n行  20nG表示跳到20行;

14:H 跳到屏幕的最上方那一行的第一个字符,M跳到屏幕中央那一行的第一个字符,L跳到屏幕最下方那一行的第一个字符;

扩展模式:

1:set nu 显示行号;

2::w 将文件存入/写入磁盘;

3::q 退出磁盘(不保存);

4::wq 将文件写入保存并退出;

5::wq!将文件写入保存强制并退出;
复制代码


 
linux基本功必知必会

 

 

虚拟环境之virtualenvwrapper

步骤1:安装virtualenvwrapper

pip3 install virtualenvwrapper

步骤2:设置Linux的环境变量,每次启动就加载virtualenvwrapper

复制代码
把下面两行代码添加到 ~/.bashrc文件中
打开文件
vim ~/.bashrc
写入以下两行代码
export WORKON_HOME=~/Envs   #设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'   #添加virtualenvwrapper的参数,生成干净隔绝的环境
export VIRTUALENVWRAPPER_PYTHON=/opt/python347/bin/python3     #指定python解释器  使用which python3查找

export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/python3/bin/virtualenv

source /opt/python34/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
读取文件,使得生效,此时已经可以使用virtalenvwrapper
source ~/.bashrc
复制代码

 

步骤3:基本使用virtualenvwrapper

复制代码
创建一个虚拟环境:
$ mkvirtualenv my_django115
这会在 ~/Envs 中创建 my_django115 文件夹。

在虚拟环境上工作:激活虚拟环境my_django115
$ workon my_django115


再创建一个新的虚拟环境
$ mkvirtualenv my_django2

virtualenvwrapper 提供环境名字的tab补全功能。
当有很多环境, 并且很难记住它们的名字时,这就显得很有用。

workon还可以任意停止你当前的环境,可以在多个虚拟环境中来回切换
workon django1.15

workon django2.0

也可以手动停止虚拟环境
deactivate

删除虚拟环境,需要先退出虚拟环境
rmvirtualenv my_django115
复制代码

步骤四:常用其他命令

复制代码
lsvirtualenv
列举所有的环境。
cdvirtualenv
导航到当前激活的虚拟环境的目录中,比如说这样您就能够浏览它的 site-packages 。
cdsitepackages
和上面的类似,但是是直接进入到 site-packages 目录中。
lssitepackages
显示 site-packages 目录中的内容。

完整官网介绍:https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html

 

 
 

 

第一步:添加 MariaDB yum 仓库

1、首先在 RHEL/CentOS 和 Fedora 操作系统中添加 MariaDB 的 YUM 配置文件 MariaDB.repo 文件。

#编辑创建mariadb.repo仓库文件 vi /etc/yum.repos.d/MariaDB.repo
复制代码
2、添加repo仓库配置
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
复制代码

第二步:在 CentOS 7 中安装 MariaDB

2、当 MariaDB 仓库地址添加好后,你可以通过下面的一行命令轻松安装 MariaDB。

yum install MariaDB-server MariaDB-client -y

第三不,启动mariadb相关命令

复制代码
 
mariadb数据库的相关命令是:

systemctl start mariadb  #启动MariaDB

systemctl stop mariadb  #停止MariaDB

systemctl restart mariadb  #重启MariaDB

systemctl enable mariadb  #设置开机启动
 
复制代码

启动后正常使用mysql

systemctl start mariadb

 

初始化mysql

复制代码
在确认 MariaDB 数据库软件程序安装完毕并成功启动后请不要立即使用。为了确保数据 库的安全性和正常运转,需要先对数据库程序进行初始化操作。这个初始化操作涉及下面 5 个 步骤。
➢ 设置 root 管理员在数据库中的密码值(注意,该密码并非 root 管理员在系统中的密 码,这里的密码值默认应该为空,可直接按回车键)。
➢ 设置 root 管理员在数据库中的专有密码。
➢ 随后删除匿名账户,并使用 root 管理员从远程登录数据库,以确保数据库上运行的业
务的安全性。
➢ 删除默认的测试数据库,取消测试数据库的一系列访问权限。
➢ 刷新授权列表,让初始化的设定立即生效。
复制代码

确保mariadb服务器启动后,执行命令初始化

mysql_secure_installation

初始化mysql

 

 mysql基本命令

#修改mysql密码
MariaDB [(none)]> set password = PASSWORD('redhat123');

生产环境里不会死磕root用户,为了数据库的安全以及和其他用户协同管理数据库,就需要创建其他数据库账户,然后分配权限,满足工作需求。

MariaDB [(none)]> create user yuchao@'127.0.0.1' identified by 'redhat123';

MariaDB [(none)]> use mysql;

MariaDB [mysql]> select host,user,password from user where user='yuchao';

切换普通用户yuchao,查看数据库信息,发现无法看到完整的数据库列表

[root@master ~]# mysql -uyuchao -p -h 127.0.0.1

MariaDB [(none)]> show databases;

数据库权限设置

mysql使用grant命令对账户进行授权,grant命令常见格式如下

grant 权限 on 数据库.表名 to 账户@主机名            对特定数据库中的特定表授权
grant 权限 on 数据库.* to 账户@主机名              对特定数据库中的所有表给与授权
grant 权限1,权限2,权限3 on *.* to 账户@主机名      对所有库中的所有表给与多个授权
grant all privileges on *.* to 账户@主机名      对所有库和所有表授权所有权限

退出数据库,使用root登录,开始权限设置

复制代码
[root@master ~]# mysql -uroot -p

MariaDB [(none)]> use mysql;

MariaDB [(none)]> grant all privileges on *.* to yuchao@127.0.0.1;

MariaDB [mysql]> show grants for yuchao@127.0.0.1;
复制代码

移除权限

MariaDB [(none)]> revoke all privileges on *.* from yuchao@127.0.0.1;

配置mysql

1.中文编码设置,编辑mysql配置文件/etc/my.cnf,下入以下内容

复制代码
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
复制代码

 

2.授权配置

复制代码
 
远程连接设置哦设置所有库,所有表的所有权限,赋值权限给所有ip地址的root用户
mysql > grant all privileges on *.* to root@'%' identified by 'password';
#创建用户
mysql > create user 'username'@'%' identified by 'password';
#刷新权限
flush privileges;
复制代码

数据库备份与恢复

mysqldump命令用于备份数据库数据

[root@master ~]# mysqldump -u root -p --all-databases > /tmp/db.dump

2.导出db1、db2两个数据库的所有数据

mysqldump -uroot -proot --databases db1 db2 >/tmp/user.sql

进入mariadb数据库,删除一个db

[root@master ~]# mysql -uroot -p

MariaDB [(none)]> drop database s11;

进行数据恢复,吧刚才重定向备份的数据库文件导入到mysql中

[root@master ~]# mysql -uroot -p < /tmp/db.dump

MYSQL主从复制

MySQL数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上。

MySQL数据库支持单向、双向、链式级联,等不同业务场景的复制。在复制的过程中,一台服务器充当主服务器(Master),接收来自用户的内容更新,而一个或多个其他的服务器充当从服务器(slave),接收来自Master上binlog文件的日志内容,解析出SQL,重新更新到Slave,使得主从服务器数据达到一致。

主从复制的逻辑有以下几种

一主一从,单向主从同步模式,只能在Master端写入数据

一主多从

双主主复制逻辑架构,此架构可以在Master1或Master2进行数据写入,或者两端同事写入(特殊设置)

在生产环境中,MySQL主从复制都是异步的复制方式,即不是严格的实时复制,但是给用户的体验都是实时的。
MySQL主从复制集群功能使得MySQL数据库支持大规模高并发读写成为可能,且有效的保护了服务器宕机的数据备份。

应用场景

利用复制功能当Master服务器出现问题时,我们可以人工的切换到从服务器继续提供服务,此时服务器的数据和宕机时的数据几乎完全一致。
复制功能也可用作数据备份,但是如果人为的执行drop,delete等语句删除,那么从库的备份功能也就失效了.

主从机制实现原理

(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events); 
(2) slave将master的binary log events拷贝到它的中继日志(relay log); 
(3) slave重做中继日志中的事件,将改变反映它自己的数据。

master主库配置

复制代码
 
#查看数据库状态
systemctl status mariadb
#停mariadb
systemctl stop mariadb

#修改配置文件
vim /etc/my.cnf
#修改内容
#解释:server-id服务的唯一标识(主从之间都必须不同);log-bin启动二进制日志名称为mysql-bin

  [mysqld]
  server-id=1
  log-bin=mysql-bin

#重启mariadb
systemctl start mariadb
 
复制代码

master主库添加从库账号

复制代码
 
1.新建用于主从同步的用户chaoge,允许登录的从库是'192.168.178.130'
create user 'chaoge'@'192.168.178.130' identified by 'redhat';

2.#题外话:如果提示密码太简单不复合策略加在前面加这句
mysql> set global validate_password_policy=0;

3.给从库账号授权,说明给chaoge从库复制的权限,在192.168.178.130机器上复制
grant replication slave on *.* to 'chaoge'@'192.168.178.130';
#检查主库创建的复制账号
select user,host from mysql.user;
#检查授权账号的权限
show grants for chaoge@'192.168.178.130';

实现对主数据库锁表只读,防止数据写入,数据复制失败
flush table with read lock;

4.检查主库的状态

MariaDB [(none)]> show master status
-> ;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 575 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

File是二进制日志文件名,Position 是日志开始的位置。后面从库会用到 后面从库会用到 后面从库会用到!!!!!!

 

5.锁表后,一定要单独再打开一个SSH窗口,导出数据库的所有数据,

[root@oldboy_python ~ 19:32:45]#mysqldump -uroot -p --all-databases > /data/all.sql 

6.确保数据导出后,没有数据插入,完毕再查看主库状态

show master status;

7.导出数据完毕后,解锁主库,恢复可写;

unlock tables;

8.将备份导出的数据scp至Slave数据库

scp /data/all.sql root@192.168.178.130:/data/

 
复制代码

slave从库配置

复制代码
1.设置server-id值并关闭binlog功能参数
数据库的server-id在主从复制体系内是唯一的,Slave的server-id要与主库和其他从库不同,并且注释掉Slave的binlog参数。
2.因此修改Slave的/etc/my.cnf,写入
[mysqld]
server-id=3
3.重启数据库
systemctl restart mariadb
4.检查Slava从数据库的各项参数
show variables like 'log_bin';
show variables like 'server_id';
5.恢复主库Master的数据导入到Slave库
导入数据(注意sql文件的路径)
mysql>source /data/all.sql;
方法二:
#mysql -uroot -p < abc.sql
6.配置复制的参数,Slave从库连接Master主库的配置
mysql > change master to master_host='192.168.178.129',
master_user='chaoge',
master_password='redhat',
master_log_file='mysql-bin.000001',
master_log_pos=575;
7.启动从库的同步开关,测试主从复制的情况
start slave;
8.查看复制状态
show slave status\G;
复制代码

 检查主从复制是否成功的关键在于

复制代码
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.119.10
                  Master_User: chaoge
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 1039
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 537
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
复制代码

 

tip:

注意此处还未配置从库的只读模式,只需在slave服务器上配置/etc/my.cnf,加上以下配置,并且在slave上创建普通用户,使用普通用户主从同步即可达到只读的效果

如果用root用户,无法达到readonly,这是一个坑

复制代码
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
server-id=3
read-only=true
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
复制代码

 

 

 

CentOS7中使用yum安装Nginx的方法

1、添加源

  默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址。因此可以如下执行命令添加源:

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2、安装Nginx

  通过yum search nginx看看是否已经添加源成功。如果成功则执行下列命令安装Nginx。

sudo yum install -y nginx
3、启动Nginx并设置开机自动运行
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
复制代码

 

ok

posted @ 2019-11-29 22:21  AnthonyWang  阅读(132)  评论(0)    收藏  举报