Python运维学习笔记 - Go语言中文社区

Python运维学习笔记


文章目录

1. 项目运维
1.1 运维的分类

① helpdesk:维修电脑、打印机等,随叫随到。

② 初级运维:熟悉linux命令,可以搭建ftp,smba,nginx,apache等,发布开发打包过来的项目+nginx+uwgsi,发布高性能的网站。

③ 架构师(运维开发):精通python,精通linux,精通网络,知识领域非常广。

1.2 项目发布流程

开发人员把代码写好之后发给测试人员测试性能。测试通过之后,给运维人员进行线上发布。监控运维,无论是各部门的运维,都要保障项目/网站 7*24小时正常工作。

2. 软件安装与项目部署
2.1 软件安装的方式

① yum安装:适合小型软件

② rpm安装:需要处理依赖关系,不推荐使用

③ 编译安装:适合大型软件,需要自定制功能的软件

2.2 编译安装Python3

① 解决依赖关系

[root@instance-mtfsf05r ~]# yum update

[root@VM_39_157_centos ~]# yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y

② 下载python3的源代码

[root@VM_39_157_centos ~]# wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz,或

[root@instance-mtfsf05r ~]# wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz

③ 解压缩源代码

[root@instance-mtfsf05r ~]# tar zxvf Python-3.7.3.tgz -C ./

[root@instance-mtfsf05r ~]# xz -d Python-3.4.7.tar.xz

[root@instance-mtfsf05r ~]# tar -xf Python-3.4.7.tar

④ 切换进入python源代码目录

[root@instance-mtfsf05r ~]# cd Python-3.7.3/

⑤ 释放编译文件

[root@instance-mtfsf05r Python-3.7.3]# ./configure --prefix=/usr/local/python373

执行完这条语句后还不会生成/usr/local/python373这个文件夹。./configure是用来检测安装平题啊的目标特征。比如,它会检测你是不是有CC或GCC,它是一个sheel脚本。configure脚本执行后,会生成一个Makefile文件。

./configure:是当前文件夹下面的configure文件(绿色的文件表示可执行文件)
./configure --prefix=/usr/local:释放脚本文件,指明安装路径。

执行后会检查依赖问题,如果依赖没解决好,就会有各种报错。

⑥ 编译与安装

[root@instance-mtfsf05r Python-3.7.3]# make

[root@instance-mtfsf05r Python-3.7.3]# make install

这两步完成后才会创建/usr/local/python373这个文件夹。make是用来编译的,它从Makefile中读取指令,然后编译。make install是用来安装的,它也会从Makefile中读取指令,安装到指定的位置。

这两句也可以一句执行:make && make install,表示make执行成功之后,才会执行make install命令。make命令执行的时候,就会调Makefile开始编译。

⑦ 配置软链接,快捷启动python3和pip3(如果选择配置软链接,请忽略⑧⑨ )

[root@instance-mtfsf05r bin]# ln -s /usr/local/python373/bin/python3 /usr/bin/python3

[root@instance-mtfsf05r bin]# ln -s /usr/local/python373/bin/pip3 /usr/bin/pip3

[root@instance-mtfsf05r ~]# pip3 install --upgrade pip

pip3 install --upgrade pip的意思是:通过pip3 install 这个命令去升级pip

如果想要直接执行python就使用python3可以执行下面的操作:
[root@instance-mtfsf05r ~]# cd /usr/bin
[root@instance-mtfsf05r bin]# mv python python.backup
[root@instance-mtfsf05r bin]# ln -s /usr/local/bin/python3.7 /usr/bin/python

⑧ 配置系统环境变量,加入python3的目录(与⑦ 任选其一种方式)

  • 第一种方式:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/python3/bin/
  • 第二种方式:PATH=$PATH:/usr/local/python3/bin/

配置环境变量需要谨慎,如果配错了,其它命令也会丢失。

⑨ 写入个人配置文件,永久生效

  • 编辑配置文件:[root@instance-mtfsf05r bin]# vim /etc/profile
  • 将PATH写入到配置文件中:PATH=$PATH:/usr/local/python3/bin/(可以放到最后一行)
  • 读取配置文件,生效配置:[root@instance-mtfsf05r bin]# source /etc/profile
2.3 安装启动django

① 安装django

[root@instance-mtfsf05r ~]# pip3 install django

② 创建django项目

[root@instance-mtfsf05r ~]# /usr/local/python373/bin/django-admin startproject mysite

③ 修改django项目中的settings.py配置文件

settings.py

…
ALLOW_HOST = ['*']

④ 启动django

[root@instance-mtfsf05r mysite]# python3 manage.py runserver 0.0.0.0:5001
在这里插入图片描述

2.4 virtualenv详解

在使用Python开发的过程中,物理环境中存在各种各样的库,这些库的版本是固定的,而不同的工程依赖于不同版本的库,就会引起依赖问题。这个时候,我们需要对不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁。virtualenv是一个帮助我们管理不同python环境的工具,使用virtualenv可以在系统上建立多个不同并且相互不干扰的虚拟环境。

virtualenv的原理是:把系统python复制一份到virtualenv环境,用命令source venv/bin/activate进入virtualenv环境时,virtualenv会修改环境变量,在原有$ PATH(echo $ PATH)的最前面加上虚拟环境的bin目录,这样,在虚拟环境下优先执行虚拟环境中的Python3和pip3。也就是说虚拟环境中的$PATH和物理环境中的是不一样的。

① 安装virtualenv库

pip3 install --upgrade pip:升级pip工具

pip3 install virtualenv:安装virtualenv。如果下载慢,可以指定清华源或者豆瓣源下载:

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv

② 创建独立运行

virtualenv --no-site-packages --python=python3 venv

–no-site-packages的意思是构建一个干净的、和外界没有关系的虚拟环境。虚拟环境是基于物理环境的复制,这里是基于Python3,所有需要使用–python=python3。venv是虚拟环境的名字,这里使用的相对路径。

③ 激活虚拟环境

source venv/bin/activate

④ 退出虚拟环境

deactivate

⑤ 查看pip3,可以看到pip3来自于虚拟环境

which pip3

2.5 开发环境的一致性

我们在本地开发环境准备好了Python项目和依赖环境,现在需要放到服务器中上线发布,那么必须要保证服务器服务器的Python环境和本地环境是一致的。

① 导出当前Python环境的包

pip3 freeze > requirements.txt

这句命令执行后将会创建一个 requirements.txt 的文件,其中包含了当前环境所有的包/库以及各自版本的简单列表。

② 将产生的文件上传到服务器,在服务器下创建虚拟环境,在虚拟环境(venv)中导入项目所需要的模块依赖。

pip3 install -r requirements.txt

2.6 virtualenvwrapper

virtualenv最大的缺点就是每次开启虚拟环境都要去虚拟环境所在目录的bin目录下激活虚拟环境,这就要求我们每次都要记住这个虚拟环境所在的目录。一种解决方案就是将所有的虚拟环境目录全部收集起来,针对不同的目录做不同的事。为了方便我们使用虚拟环境我们可以使用virtualenvwrapper来管理虚拟环境,其实virtualenvwrapper就是统一管理虚拟环境的目录,并且省去了source的步骤。

① 安装virtualenvwrapper

# 安装virtualenvwrapper
[root@master ~]# pip3 install virtualenvwrapper
# 如果上面的安装比较慢,可以指定清华源安装virtualenvwrapper
[root@master ~]# pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenvwrapper

② 设置linux环境变量,每次启动就加载virtualenvwrapper

# 找到which virtualenvwrapper.sh所在路径
[root@master ~]# which virtualenvwrapper.sh
# 没有找到使用find命令
[root@master ~]# find / -name virtualenvwrapper.sh
/usr/local/python373/bin/virtualenvwrapper.sh
# 将/usr/local/python373/bin/目录加入到环境变量
[root@master ~]# PATH=$PATH:/usr/local/python373/bin
# 写入个人配置文件,永久生效
[root@master ~]# vim /etc/profile
# 将下面一行代码放在/profile文件的最下面
PATH=$PATH:/usr/local/python373/bin/
# 读取文件生效
[root@master ~]# source /etc/profile
# 编辑~/.bashrc文件,此文件在用户每次登录的时候,系统就会读取这个文件
[root@master ~]# vim ~/.bashrc 
# 在.bashrc文件只写入下面两行代码
export WORK_HOME=/Envs # 设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/python373/bin/virtualenvwrapper.sh # 执行virtualenvwrapper安装脚本
# 读取文件使生效,此时就可以使用virtualenvwrapper
[root@master ~]# source ~/.bashrc 
virtualenvwrapper.user_scripts creating /root/.virtualenvs/premkproject
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postmkproject
virtualenvwrapper.user_scripts creating /root/.virtualenvs/initialize
virtualenvwrapper.user_scripts creating /root/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/preactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/get_env_details

③ 虚拟环境相关命令

# 创建venv虚拟环境,默认会激活这个虚拟环境
[root@master ~]# mkvirtualenv venv
# 退出虚拟环境
(venv) [root@master ~]# deactivate
# 进入/切换虚拟环境,workon提供自动补全功能,可以停止你当前的环境可以在多个虚拟环境中来回切换
[root@master ~]# workon venv
# 删除虚拟环境venv
(venv) [root@master ~]# deactivate
[root@master ~]# rmvirtualenv venv
# 列举所有虚拟环境
[root@master ~]# lsvirtualenv
# 在虚拟环境下做了统一的管理,查看Envs目录
[root@master ~]# ls ~/Envs/
get_env_details  postactivate    postmkproject     postrmvirtualenv  predeactivate  premkvirtualenv
initialize       postdeactivate  postmkvirtualenv  preactivate       premkproject   prermvirtualenv
# 切换到当前激活的虚拟环境的目录
(venv) [root@master ~]# cdvirtualenv 
(venv) [root@master venv]#
3. mysql相关
3.1 安装mysql

可以参考官方安装方式:https://downloads.mariadb.org/mariadb/repositories/#distro=CentOS&distro_release=centos7-ppc64le–centos7&mirror=tuna&version=10.4

① 添加MariaDB yum仓库

1、切换到yum.repos.d目录下
[root@instance-mtfsf05r ~]# cd /etc/yum.repos.d/
2、创建并且编辑MariaDB.repo yum仓库文件
[root@instance-mtfsf05r yum.repos.d]# vim MariaDB.repo
3、将下面的内容写入到MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
PS:还可以指定指定清华源,下载更快
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.4/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

清理yum缓存:yum clean all

生成缓存:yum makecache

② 安装MariaDB

sudo yum install MariaDB-server MariaDB-client -y

③ MariaDB的卸载

1、使用yum卸载mariadb
[root@instance-mtfsf05r ~]# yum remove mariadbdb
2、删除数据库配置文件
[root@instance-mtfsf05r ~]# rm -f /etc/my.cnf
3、删除数据目录
[root@instance-mtfsf05r ~]# rm -rf  /var/lib/mysql
3.2 启动/关闭相关命令
  • 启动Mariadb:systemctl start mariadb
  • 查看MariaDB的启动状态:systemctl status mariadb
  • 停止Mariadb:systemctl stop mariadb
  • 重启Mariadb:systemctl restart mariadb
  • 设置开机启动:systemctl enable mariadb
3.3 初始化mysql
在确认 MariaDB 数据库软件程序安装完毕并成功启动后请不要立即使用。为了确保数据 库的安全性和正常运转,需要先对数据库程序进行初始化操作。这个初始化操作涉及下面 5 个 步骤。
➢ 设置 root 管理员在数据库中的密码值(注意,该密码并非 root 管理员在系统中的密 码,这里的密码值默认应该为空,可直接按回车键)。
➢ 设置 root 管理员在数据库中的专有密码。
➢ 随后删除匿名账户,并使用 root 管理员从远程登录数据库,以确保数据库上运行的业
务的安全性。
➢ 删除默认的测试数据库,取消测试数据库的一系列访问权限。
➢ 刷新授权列表,让初始化的设定立即生效。

确保mariadb服务器启动后,执行命令初始化:mysql_secure_installation,执行后会问你这几个问题,需要y然后设置即可。

Set root password? [Y/n] 
Remove anonymous users? [Y/n] 
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]
3.4 mysql基本命令
  • 修改mysql密码:MariaDB [(none)]> set password=password('123456');
  • 创建其它数据库用户:MariaDB [(none)]> create user thanlon@'%' identified by '123456';
  • 查看那thanlon数据库用户的相关信息:
MariaDB [mysql]> use mysql
MariaDB [mysql]> select *from user where user='thanlon'G;
MariaDB [mysql]> select host,user,password from user where user='thanlon'G;

如果切换到thanlon用户是无法查看到完整的数据库列表。

3.5 权限的配置

mysql使用grant命令对账户进行授权:

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

给thanlon所有数据库所有表的权限:MariaDB [(none)]> grant all privileges on *.* to thanlon@'%';
给thanlon创建数据库数据表的权限:MariaDB [(none)]> grant create on *.* to thanlon@'%';
给thanlon删除数据库数据表的权限:MariaDB [(none)]> grant drop on *.* to thanlon@'%';
查看授权给某个用户的权限:MariaDB [(none)]> show grants for thanlon@'%';
移除权限:MariaDB [(none)]> revoke all privileges on *.* from thanlon@'%';

3.5 端口的修改
# 查看数据库端口
MariaDB [(none)]> show global variables like 'port'
# 修改配置文件
[root@master ~]$ vim /etc/my.cnf
# 在[mysqld]的下面添加或修改port=3333
[mysqld]
port=3333
# 重启mysql
[root@master ~]$ systemctl restart mysql
# 查看更改后的端口
MariaDB [(none)]> show global variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3333  |
+---------------+-------+
1 row in set (0.001 sec)
3.6 编码的配置

查看数据库中编码:s

Server characterset:	latin1
Db     characterset:	latin1
Client characterset:	utf8
Conn.  characterset:	utf8

需要都配置成utf8的编码,才能显示中文。所以需要修改配置文件,编辑配置文件vim /etc/my.cnf,在mysqld下输入:

[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

重启mysql:systemctl restart mysql,此时输入s,查看编码:

Server characterset:	utf8
Db     characterset:	utf8
Client characterset:	utf8
Conn.  characterset:	utf8
3.7 远程登录的配置

授权配置:远程连接设置所有库和所有表的所有权限,赋值权限给所有ip地址的thanlon用户

# 授权
grant all privileges on *.* to root@'%';
# 刷新权限,防止授权没有生效
flush privileges;
# 查看权限
show grants for root@'%';
# 移除权限
revoke all privileges on *.* from root@'%';

远程登录:

thanlon@plus-book:~$ mysql -uroot -p -h10.0.0.2
thanlon@plus-book:~$ mysql -uroot -p -h10.0.0.3

如果遇到问题,查看是不是防火墙的问题,可以关闭防火墙:

1、查看防火墙的状态
[root@instance-mtfsf05r ~]# getenforce
2、清空防火墙规则																
[root@instance-mtfsf05r ~]# iptables -F
3、关闭防火墙
[root@instance-mtfsf05r ~]# systemctl stop firewalld
4、移除开机自启
[root@instance-mtfsf05r ~]# systemctl disable firewalld
3.8 数据的备份与恢复

mysqldump命令用于备份数据库的数据,备份的命令是:

[root@instance-mtfsf05r ~]# mysqldump -uroot -p --all-databases > all.dump

删除一个数据库,如何恢复,可以通过备份文件进行恢复:

1、登录数据库后使用source
[root@instance-mtfsf05r ~]# source all.dump
2、登录数据库的时候,使用<是重定向写入符号写入数据库
[root@instance-mtfsf05r ~]# mysql -uroot -p < all.dump
3.9 主从复制

mysql数据库的主从复制方案,是其自带的功能。并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上。mysql数据库支持单向、双向、链式级联,等不同业务场景的复制。在复制的过程中,一台服务器充当主服务器(master),接收来自用户的内容更新。而一个或多个其他的服务器充当从服务器(slave),接收来自master上binlog文件的日志内容,解析出sql,重新更新到自己的服务器上,使得主从服务器数据达到一致。

① 主从复制的架构

  • 一主一从,单向主从同步模式,只能在Master端写入数据
    在这里插入图片描述
  • 一主多从
    在这里插入图片描述
  • 双主复制架构,此架构可以在master或master进行数据写入,或者两端同事写入(特殊设置):
    在这里插入图片描述

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

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

③ 主从复制的实现原理
在这里插入图片描述

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

实现主从配置的环境是需要两台服务器,一台服务器安装主数据库,一台安装从数据库。如果你有两台云服务器,这将节省下很多安装系统的时间。如果你没有云服务器,也是没有关系的。我们可以VMware软件虚拟化两台服务器,注意这两台服务器要在使用NAT方式连接网络,并且要配置静态ip,还要在同一个局域网中。具体配置可以到网上搜索,配置实在是有问题可以在评论区留言。我这里虚拟化两台服务器,ip地址分别是10.0.0.210.0.0.3,前者安装主库,后者安装从库。主从复制有好三种架构,我们这里使用其中的一种:一主一从。
在这里插入图片描述
① 主库的配置

  • 修改配置文件
[root@master ~]# vim /etc/my.cnf
在配置文件的[mysqld]下追加下面的内容(server-id服务的唯一标识,主从之间都必须不同;log-bin启动二进制日志名称为mysql-bin):
[mysqld]
server-id=1
log-bin=mysql-bin
  • 重启mysql数据库
[root@master ~]# systemctl restart mariadb
重启后,mysql主库已经开启同步功能,创建了mysql-bin日志文件
可以通过下面的命令查看生成的二进制文件:
[root@master ~]# ls /var/lib/mysql
  • 创建用于主从同步的账号并赋予权限
# 创建用于主从同步的账号
MariaDB [(none)]> create user 'slave'@'%' identified with mysql_native_password by '123456';
# 为这个账户赋予slave权限
MariaDB [(none)]> grant replication slave on *.* to slave@'%';
# 刷新权限列表,防止没有生效
MariaDB [(none)]> flush privileges;
# 检查一下主库创建的账号信息
MariaDB [(none)]> select user,host from mysql.user;
# 查看这个账户的权限
MariaDB [(none)]> show grants for slave@'%';
  • 主库的锁表,防止数据写入
MariaDB [(none)]> flush table with read lock;
  • 检查主库的日志状态,查看日志位置(锁表是防止日志位置发生变化)
MariaDB [(none)]> show master status
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      632 |              |                  |
+------------------+----------+--------------+--------------
                        
                        
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Thanlon/article/details/100941385
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢