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
为了解决虚拟环境管理的问题,因为虚拟环境可以在任何目录下创建,建在指定目录
# 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
二、
题外科普:mariadb 是mysql的分支
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日志,并复制主服务器上的日志,也就是复制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
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
-
-
支持增量备份
-
锁行
官方网站: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

浙公网安备 33010602011771号