linux项目部署软件(虚拟环境、mysql)

一、虚拟环境

安装

pip3 install virtualenv -i https://mirrors.aliyun.com/pypi/simple/

创建虚拟环境(原生创建)

 virtualenv参数选择
--no-site-packages 创建一个全新的python环境    # 以废弃
--python 指定以哪个python来创建虚拟环境

# 创建虚拟环境的命令
virtualenv django11 # 创建名为django11的虚拟环境

进入虚拟环境

source django11/bin/activate 

退出虚拟环境

deactivate

确保环境一致

# 在windows上执行如下命令:
# 将windows上安装的包做快照
pip freeze > requirement.txt
# 将requirement.txt发送到linux上
# 切换虚拟机
pip install -r requirement.txt -i https://pypi.douban.com/simple

virtualenvwrapper(创建虚拟环境)

为了解决虚拟环境管理的问题,因为虚拟环境可以在任何目录下创建,建在指定目录

# 1. 安装
pip3 install virtualenvwrapper -i https://mirrors.aliyun.com/pypi/simple/
# 2.修改文件
vim ~/.bashrc

export WORKON_HOME=/envdir   
export VIRTUALENVWRAPPER_PYTHON=/usr/local/python38/bin/python3     
source /usr/local/python38/bin/virtualenvwrapper.sh
# 3. 加载~/.bashrc
source ~/.bashrc
# 4.创建环境
mkvirtualenv django11 创建并切换
# 5.进入虚拟环境
workon name
# 6.切换到当前虚拟环境的文件夹(在已创建的虚拟环境)
cdvirtualenv
# 7.切换到当前虚拟环境的第三方包的文件夹
cdsitepackages
# 8.退出
deactivate
# 9.列出当前管理的虚拟环境
lsvirtualenv
# 10.列出当前虚拟环境的第三方包
lssitepackages
# 11.删除虚拟环境(必须要退出才能删除)
rmvirtualenv name 

二、mysql

题外科普:mariadb 是mysql的分支

下载(默认安装到opt目录下)

也可以直接在官方网站下载

wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar

解压

tar xf mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar

安装

yum install -y *.rpm # 安装

默认安装位置:/var/lib/mysql

打开配置文件

vim /etc/my.cnf
# 修改配置文件,存储地方
[mysqld]
datadir=/mydata/mysql
socket=/mydata/mysql/mysql.sock
# 新建目录
mkdir -p /mydata/mysql
# 修改目录的属主和属组
chown mysql -R /mydata/mysql

启动数据库

systemctl start mysqld

启动后报错信息:(selinux安全策略,关掉)

2019-08-30T11:18:22.976635Z 0 [Warning] Can't create test file /mydata/mysql/localhost.lower-test
2019-08-30T11:18:22.976687Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.27) starting as process 2788 ...
2019-08-30T11:18:22.980289Z 0 [Warning] Can't create test file /mydata/mysql/localhost.lower-test
2019-08-30T11:18:22.980338Z 0 [Warning] Can't create test file /mydata/mysql/localhost.lower-test

#解决办法:
setenforce 0

登录报错

m[root@qiao test]#mysql -uroot -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

因为修改了路径,再此修改配置文件

vim /etc/my.cnf

添加

[mysql]
socket=/mydata/mysql/mysql.sock

 登录并重置密码

查看默认密码

grep 'pass' /var/log/mysqld.log    # 复制密码

登录

mysql -uroot -p

输入密码默认密码

重置密码

# 重置root密码(MySQL 5.7+版本)

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';   
FLUSH PRIVILEGES;
EXIT;

使用mysql_secure_installation命令,简便方法

mysql_secure_installation
输入root密码
是否要修改密码
是否要修改root密码(大小写、数字、特殊字符)
是否要删除匿名用户
是否禁止root远程登录
是否要删除test数据库
是否要刷新表的权限

密码校验规则

设置密码的校验规则
mysql> set global validate_password_policy=0;
0 校验级别最低,只校验密码的长度,长度可以设定
1 必须包括大写字母、小写字母、数字、特殊字符
2 必须满足上面两条,并追加,对于密码中任意连续的4个(或者4个以上) 字符不能是字典中的单词
mysql> set global validate_password_length=3; 修改密码的最短长度

创建用户

mysql>create user 'username'@'%' identified by 'password';
# 全部ip的话则是%

查看权限

mysql>show grants;

用户授权

mysql> grant all on *.* to 'root'@'%' identified by '密码';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;    # 刷新
Query OK, 0 rows affected (0.00 sec)

mysql主从

数据库的读比写要多,二八法则,从服务器只用来到读,主服务器负责写 ,提升数据库的读写速度。主服务器安装一个mysql,从服务器安装一个mysql,从服务器没有mysql监控主服务器上的mysql日志,并复制主服务器上的日志,也就是复制sql语句,主服务器上执行的sql语句,也在从服务器上的mysql执行同样的sql语句,以保持两个数据库的同步。

主服务器上配置如下

vim /vim /etc/my.cnf

配置文件添加下列命令

server-id=1 # 设置id
log-bin=/mydata/log/master-bin #启动binlog日志
sync_binlog = 1 #确保主从复制事务安全

新建目录

mkdir /mydata/log/

让改文件有读写的权限

chown mysql -R /mydata/

重新启动数据库

systemctl restart mysqld

主服务器执行如下sql

mysql> grant replication slave on *.* to 'slave'@'192.168.21.131' identified by '1234';    # 设置用户,被从服务器上mysql作为监听对象
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
show master status\G

从服务配置如下:

server-id =12
relay_log =/mydata/log/slave-log
sync_binlog = 1
read-only=ON # 让从服务器上的数据库只用来读

从服务器执行如下sql

CHANGE MASTER TO
  MASTER_HOST='master2.example.com',
  MASTER_USER='replication',
  MASTER_PASSWORD='password',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master2-bin.001',
  MASTER_LOG_POS=4,
  MASTER_CONNECT_RETRY=10; #监控主服务器的时间
# 连接主库
change master to master_host='192.168.21.128',master_user='slave',master_password='1234';
# 启动进程
start slave;
# 查看状态
show slave status\G

问题:

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解决办法:
rm -rf /mydata/mysql/auto.cnf
systemctl restart mysqld

mysql备份与恢复

mysqldump

  • 锁表

  • 备份特别慢,适用于数据量较小

  • 不可以做增量备份

  • 单线程

 mysqldump --help
 -A, --all-databases 所有的库
 -B 指定备份的库
 —F 备份前刷新日志
 --flush-privileges 刷新授权表
 -p 密码
 -u 用户
 -P 端口
 

触发器(自学) 存储过程和存储函数

备份

mysqldump -uroot -S /mydata/mysql/mysql.sock -A -p > mysql.sql

恢复一

mysql>source ~/mysql.sql; # 需要备份sql文件的路径

恢复二

mysql -uroot -p < mysql.sql

xtrabackup

  • 多进程

  • 支持增量备份

  • 锁行

官方网站:https://docs.percona.com/percona-xtrabackup/2.4/installation/yum_repo.html

# 安装yum仓库
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm 

查看yum仓库

yum list | grep percona

安装软件

yum install -y percona-xtrabackup-24

查看xtrabackup命令

xtrabackup --help
--target-dir=name # 指定备份生成的目录
--backup 备份
--prepare 准备
--databases=name    filtering by list of databases.
--databases-file=name  # 配置文件

试验备份之前,创建一个用户

mysql> create user 'backup'@'localhost' identified by '1234';
Query OK, 0 rows affected (0.00 sec)

mysql> grant reload,lock tables,process,replication client on *.* to 'backup'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
备份(全量备份)
xtrabackup --backup --target-dir=/mydata/backup/base -ubackup -p1234 --socket=/mydata/mysql/mysql.sock

# 创建目录
mkdir /mydata/backup
### 看得如下信息,代表成功
xtrabackup: Transaction log of lsn (5480853) to (5480862) was copied.
190902 09:25:09 completed OK!
恢复
准备文件

准备文件之前,删除数据库db1

xtrabackup --prepare --target-dir=/mydata/backup/base
# 有下列提示,表示准备成功
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 5482536
190902 09:28:12 completed OK!
恢复单个文件文件
cd /mydata/backup/base
# 在base目录中,复制db1目录到mysql目录下
cp -rf db1 /mydata/mysql/
# 改变db1目录属主和属组
chown mysql.mysql /mydata/mysql/db1/ -R
# 就成功恢复了db1文件(数据库)
恢复全部文件

在试验之前,将mysql目录下的文件删除

rm -rf *
xtrabackup --copy-back --target-dir=/mydata/backup/base
chown mysql.mysql * -R
增量备份
# 增量备份(表t1增加的数据),需要在全备的基础上做增量备份(先全量备份,再增量备份)
xtrabackup --backup --target-dir=/mydata/backup/t1 --incremental-basedir=/mydata/backup/base -uroot -p --socket=/mydata/mysql/mysql.sock
# 全备的路径
--incremental-dir

# 在t1表中新插入内容后(t2是在t1的基础上做备份)
xtrabackup --backup --target-dir=/mydata/backup/t2 --incremental-basedir=/mydata/backup/t1 -uroot -p --socket=/mydata/mysql/mysql.sock
# 应该是上一次的增量备份目录
--incremental-basedir
增量备份后准备文件
# --apply-log-only是阻止回滚未完成的事务
xtrabackup --prepare --apply-log-only --target-dir=/mydata/backup/base
恢复(只能全部删除以后再恢复)
xtrabackup --prepare --apply-log-only --target-dir=/mydata/backup/base --incremental-dir=/mydata/backup/t1

xtrabackup --prepare --apply-log-only --target-dir=/mydata/backup/base --incremental-dir=/mydata/backup/t2

# 恢复全部文件
xtrabackup --copy-back --target-dir=/mydata/backup/base

chown mysql.mysql * -R

systemctl restart mysqld

 

 

 

 

      

 

posted @ 2025-07-02 22:00  coder雪山  阅读(41)  评论(0)    收藏  举报