第一章 Mysql的安装与配置

2019-08-23  本文已影响0人  武漂的小丙

1 数据库服务器环境

1.1 安装SFTP服务

# 添加组
[root@mysql-db1 ~]# groupadd sftp
# 创建用户
# -g :加入主要组
# -s : 指定用户登入后所使用的shell
# -M : 不要自动建立用户的登入目录
[root@mysql-db1 ~]# useradd -g sftp -s /sbin/nologin -M sftp
# 修改用户sftp密码为:sftp
[root@mysql-db1 ~]# passwd sftp
# 创建sftp用户的根目录和属主.属组,修改权限(755
[root@mysql-db1 ~]# cd /usr/
[root@mysql-db1 usr]# mkdir sftp
[root@mysql-db1 usr]# chown root:sftp sftp
[root@mysql-db1 usr]# chown 755 sftp

1.2 了解xfs文件系统

# 查看分区磁盘
[root@mysql-db1 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk 
├─sda1   8:1    0  300M  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0 37.7G  0 part /
sdb      8:16   0   20G  0 disk 
sr0     11:0    1 1024M  0 rom  
sr1     11:1    1 1024M  0 rom  
# 查看硬盘label(别名)
[root@mysql-db1 ~]# blkid 
/dev/sda3: UUID="54d84ad0-f145-4a16-aff2-d00f7945c2a9" TYPE="xfs" 
/dev/sda1: UUID="b4c8131e-96f3-497b-afb7-9af36f86240f" TYPE="xfs" 
/dev/sda2: UUID="c3ea0b9b-5313-45a1-9cda-780de35868ab" TYPE="swap" 
# sdb为新增的磁盘,为该磁盘进行分区
fdisk 
   p、打印分区表。
   n、新建一个新分区。
   d、删除一个分区。
   q、退出不保存。
   w、把分区写进分区表,保存并退出。
# 查看分区
fdisk -l
# 查看挂载情况
mount -l 

/dev/sdb盘的总容量为20G,先创建一个主分区10G,再创建一个扩展分区10G【只有创建完一个扩展分区后,才能创建逻辑分区】,最后创建一个逻辑分区10G;如下所示:


   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    41943039    10484736    5  Extended
/dev/sdb5        20975616    41943039    10483712   83  Linux

然后对主分区sdb1和逻辑分区sdb5进行格式化

# 格式化分区
mkfs.xfs /dev/sdb1
# 创建挂载点
mkdir /sdb1
# 挂载
mount /dev/sdb1 /sdb1
## 挂在完成之后 在 /etc/fstab 文件中,格式如下
# <file system> <mount point>   <type>  <options>       <dump> <pass>
# 如果挂载的是非“/”根分区,dump及pass选项最好都应该是0
#  查看/dev/disk/by-uuid/ 下的设备文件信息:
ls -l /dev/disk/by-uuid/

#准备测试文件
cd /sdb1/
cp /etc/passwd ./
mkdir test
touch test/a
#指定备份时免交互操作,方便后期做定时备份
#-L  :xfsdump  纪录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明
#-M  :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明
xfsdump -f /opt/dump_passwd /sdb1 -L dump_passwd -M media1
# 参数:-s 文件路径  只对指定的文件进行备份,-s指定时,路径写的是相对路径(-s可以是文件或目录)
xfsdump -f /opt/dump_grub2 -s grub2/grub.cfg /boot -L dump_grub2 -M boot-sda1
#备份成功后,我们就可以在/var/lib/xfsdump/inventory目录下看到生成的档案信息
xfsdump  -I

增量备份演示:

# 先做一次全量备份
xfsdump -f /opt/test-full /sdb1 -L test-full -M media0
# 增加一些内容
touch /sdb1/1.txt /sdb1/2.txt
tree /sdb1/
# 进行一级增量备份
xfsdump -l 1 -f /opt/test-back1 /sdb1 -L test-bak1 -M media0
# 再增加一些内容,然后进行二级备份
 touch  /sdb1/test/a.txt  /sdb1/test/b.txt
 xfsdump -l 2 -f /opt/test-back2 /sdb1 -L test-bak2 -M media0
# 删除所有数据
rm -rf /sdb1/* 
# 1、先恢复完全备份
xfsrestore -f /opt/test-full /sdb1/
# 2、 分两种情况:
# 情况1: 恢复最后一次增量备份(如果两次增量备份都是1级的,所以只需要恢复最后一个增量就可以了。
# 情况2:如果你做的是第一次是1级备,第二次是2级备,那么你在恢复的时候就需要先恢复完全备份,然后是1级备,最后是2级备)
xfsrestore -f /opt/test-back1 /sdb1/ 
xfsrestore -f /opt/test-back2 /sdb1/ 

1.3 系统环境调整

[zxcheng@mysql-db1 ~]$ cat /etc/sysconfig/selinux 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 
[root@mysql-db1 ~]# systemctl status firewalld 
[root@mysql-db1 ~]# systemctl stop firewalld
# 开机启用
[root@mysql-db1 ~]# systemctl enable  firewalld 
# 开机禁用
[root@mysql-db1 ~]# systemctl disable firewalld

# 查看swappiness文件
root@mysql-db1 ~]# cat /proc/sys/vm/swappiness 
30
[root@mysql-db1 ~]# sysctl -a|grep swap
vm.swappiness = 30
[root@mysql-db1 ~]# 
# 修改swappinees的值,就是编辑/etc/sysctl.conf
目 录 说 明
/   处于linux系统树形结构的最顶端,它是linux文件系统的入口,所有的目录、文件、设备都在 / 之下
/bin    bin是Binary的缩写。常用的二进制命令目录。比如 ls、cp、mkdir、cut等;和/usr/bin类似,一些用户级gnu工具
/boot   存放的系统启动相关的文件,例如:kernel.grub(引导装载程序)
/dev    dev是Device的缩写。设备文件目录,比如声卡、磁盘……在Linux中
一切都被看做文件。终端设备、磁盘等等都被看做文件 
设备文件: /dev/sda,/dev/sda1,/dev/tty1,/dev/tty2,/dev/pts/1, /dev/zero, /dev/null, /dev/cdrom
/etc    常用系统及二进制安装包配置文件默认路径和服务器启动命令目录 
passwd 用户信息文件
shadow  用户密码文件
group 存储用户组信息
fstab 系统开机启动自动挂载分区列表
hosts 设定用户自己的IP与主机名对应的信息
/home   普通用户的家目录默认存放目录 
/lib    库文件存放目录,函数库目录
/lost+found
只在centos6中有 默认为空,被FSCK(file system check用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查)用来放置零散文件(没有名称的文件) 当系统非法关机后,这里就会存放一些文件。
在centos6版本下,每个分区的挂载点下会有些目录
/mnt
/media  一般用来临时挂载存储设备的挂载目录,比如有cdrom、U盘等目录
在CENTOS7中会挂载到/run下面
/opt    表示的是可选择的意思,有些软件包也会被安装在这里 
/proc   操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录是伪装的文件系统proc的挂载目录,proc并不是真正的文件系统。因此,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。也就是说,这个目录的内容不在硬盘上而是在内存里 
查看咱们的CPU信息 
cat /proc/cpuinfo
/sys    系统目录,存放硬件信息的相关文件
/run    运行目录,存放的是系统运行时的数据,比如进程的PID文件
/srv    服务目录,存放的是我们本地服务的相关文件
/sbin   大多数涉及系统管理的命令都存放在该目录中,它是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,凡是目录sbin中包含的命令都是root权限才能执行的  
/tmp    该目录用于存放临时文件,有时用户运行程序的时候,会产生一些临时文件。/tmp就是用来存放临时文件的。/var/tmp目录和该目录的作用是相似的,不能存放重要数据,它的权限比较特殊 
[root@xuegod63 ~]# ls –ld /tmp
drwxrwxrwt 10 root root 12288 Oct 3 20:45 /tmp/ 粘滞位(sticky bit)目录的sticky位表示这个目录里的文件只能被owner和root删除
/var    系统运行和软件运行时产生的日志信息,该目录的内容是经常变动的,存放的是一些变化的文件。比如/var下有/var/log目录用来存放系统日志的目录,还有mail、/var/spool/cron   
/usr    存放应用程序和文件,
/usr/bin 普通用户使用的应用程序
/usr/sbin 管理员使用的应用程序
/usr/lib 库文件Glibc(32位)
/usr/lib64 库文件Glibc
/lib
/lib64
都在/usr/目录下  这个目录里存放着系统最基本的动态链接共享库,包含许多被/bin/和/sbin/中的程序使用的库文件,目录/usr/lib/中含有更多用于用户程序的库文件。作用类似于windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库

注:lib***.a是静态库
     lib***.so是动态库
静态库在编译时被加载到二进制文件中
动态库在运行时加载到进程的内存空间中
简单的说:这些库是为了让你的程序能够正常编译运行的
其实类似于WIN中.dll文件,几乎所有的应用程序都需要用到这些共享库
# 安装tree命令
[root@mysql-db1 ~]# yum -y install tree
# open files:设置不合理,而当服务器的连接过多或表过多时,就有可能会出现打不开表或者访问不了表的现象,默认情况下为1024,即单个进程最多可以访问1024个文件句柄,超过默认值,就会出现文件句柄超限的错误“too many open files”
# max user processes:有时候可能会跑多个实例,发现创建不了新的连接,报出“resource temporarily unavailable”的错误
ulimit -a
# 修改/etc/security/limits.conf,填写如下内容:
*  soft     nproc    65535
*  hard     nproc    65535
*  soft     nofile   65535
*  hard     nofile   65535
# 安装numactl:
yum install numactl -y
# 查看系统是否支持numa
# 如果输出结果为: 
# No NUMA configuration found 
# 说明numa为disable,如果不是上面的内容说明numa为enable
dmesg | grep -i numa
# 查看numa状态
# numa_hit是打算在该节点上分配内存,最后从这个节点分配的次数; 
# num_miss是打算在该节点分配内存,最后却从其他节点分配的次数; 
# num_foregin是打算在其他节点分配内存,最后却从这个节点分配的次数; 
# interleave_hit是采用interleave策略最后从该节点分配的次数; 
# local_node该节点上的进程在该节点上分配的次数 
# other_node是其他节点进程在该节点上分配的次数
numastat
# 列举系统上的NUMA节点,查看numa相关信息,包括每个node内存大小,每个node中的逻辑cpu,也可以用lscpu查看
numactl --hardware  
# 查看网卡对应的numa node,ens33是对应的网卡名称
cat  /sys/class/net/ens33/device/numa_node 
# 查看CPU负载,需要安装“sysstat”
mpstat -P ALL

## 测试write速率
numactl --cpubind=0 --membind=0 dd if=/dev/zero of=/dev/sdb1 bs=1M count=1024
numactl --cpubind=0 --membind=1 dd if=/dev/zero of=/dev/sdb1 bs=1M count=1024

# 在开启mysqld的时候,使用interleave模式,表示允许各个节点分配内存
numactl --interleave=all mysqld

# 用vmstat看到inactive的内存的数量
vmstat -an 1

<font color="red">一般来说,MySQL,特别是InnoDB管理内存缓存,它占用的内存比较多,不经常访问的内存也会不少,这些内存如果被Linux错误的交换出去了,将浪费很多CPU和IO资源。 InnoDB自己管理缓存,cache的文件数据来说占用了内存,对InnoDB几乎没有任何好处</font>

2 安装MySQL

2.1 第一部曲

创建MySQL用户,指定MySQL所在的用户组,如下:

groupadd mysql
useradd -g mysql mysql -s /sbin/nologin

将mysql软件包统一规范放在/usr/local下面

cd /usr/local/
tar -zxvf mysql-5.6.44-linux-glibc2.12-x86_64.tar.gz

做个软链接:

ln -s mysql-5.6.44-linux-glibc2.12-x86_64 mysql

给mysql目录授权:

chown mysql:mysql -R mysql

2.2 第二部曲

创建MySQL数据库的数据目录(datadir),这了可以选择创建/data/mysql下面 命令如下:

mkdir -p /data/mysql
mount /dev/sdb5 /data/mysql
chown mysql:mysql -R /data/mysql

2.3 第三部曲

修改/etc/my.cnf

[client]
port = 3306
default-character-set = utf8
socket = /tmp/mysql.sock

[mysql]
port = 3306
default-character-set = utf8
socket = /tmp/mysql.sock

[mysqld]
##########################
# summary
##########################
bind-address = 0.0.0.0
port = 3306
basedir = /usr/local/mysql
datadir = /data/mysql
socket = /tmp/mysql.sock
#tmpdir=/tmp
#pid-file=/tmp/mysqld.pid
open_files_limit = 65535
back_log = 103
#skip-grant-tables
#skip-networking

explicit_defaults_for_timestamp=1
lower_case_table_names=1

table_open_cache = 512
external-locking = FALSE

##########################
# time out
##########################
connect_timeout = 20
wait_timeout = 86400

##########################
# connection
##########################
max_connections = 128
max_user_connections = 256
max_connect_errors = 100000
max_allowed_packet = 128M

##########################
# character set
##########################
character-set-server = utf8mb4
collation-server = utf8mb4_bin

##########################
# log bin
##########################
server-id = 1323306
log_bin = mysql-bin
# ROW、STATEMENT、MIXED
binlog_format = row
sync_binlog = 1
expire_logs_days = 7
binlog_cache_size = 128m
max_binlog_cache_size = 512m
max_binlog_size = 256M
master_info_repository=TABLE
relay_log_info_repository=TABLE
log_slave_updates=ON
binlog_checksum=none

binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performation_schema
binlog_ignore_db=sys
##########################
# gtid
##########################
gtid_mode = on
enforce_gtid_consistency = on

##########################
# log relay
##########################
relay_log = mysql-relay-bin
relay_log_purge = on
relay_log_recovery = on
max_relay_log_size = 1G

##########################
# log error
##########################
log_error=/data/mysql/mysqld_error.log

##########################
# log slow
##########################
slow_query_log = on
slow_query_log_file = /data/mysql/mysqld_slow.log
long_query_time = 2
log_queries_not_using_indexes = on

##########################
# log general
##########################
general_log = on
general_log_file = /data/mysql/mysqld_gener.log


##########################
# thread pool
##########################
#thread_handling=pool-of-threads
#thread_handling=one-thread-per-connection
#thread_pool_oversubscribe=8 

##########################
# innodb
##########################
innodb_file_per_table=1
innodb_log_file_size=1024M
innodb_log_buffer_size=64M


##########################
# password policy
# after init 
##########################
#validate_password_length=4         
#validate_password_mixed_case_count=0
#validate_password_number_count=0
#validate_password_policy=0
#validate_password_special_char_count=0

2.4 一步走

初始化数据库,命令如下:

cd /usr/local/mysql/scripts
./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --defaults-file=/etc/my.cnf --user=mysql

当出现两个“OK”的时候,证明初始化数据库成功,如下所示:

Installing MySQL system tables...2019-06-14 15:58:04 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2019-06-14 15:58:04 0 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.6.44-log) starting as process 10480 ...
OK

Filling help tables...2019-06-14 15:58:10 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2019-06-14 15:58:10 0 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.6.44-log) starting as process 10503 ...
OK

初始化完成后,可以启动mysql数据库,命令如下

./mysqld_safe --defaults-file=/etc/my.cnf &

查看mysql进程,验证是否启动成功,如下所示:

mysql     14309  13606  1 16:12 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mariadb.log --open-files-limit=65535 --pid-file=/data/mysql/mariadb.pid --socket=/tmp/mysql.sock --port=3306

3 MySQL初始化工作

3.1 创建密码

安装完MySQL之后,进入数据库是无密码进入,为保证数据库的安全性,为数据库的root用户创建密码(缺省密码为root123)

cd /usr/local/mysql/bin
./mysql
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set password=password('root123') where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0

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

修改了密码后,登录方式:

 ./mysql -uroot -proot123

低于mysql5.7的版本,数据库需要进行安全加固,只保留数据库用户为root、host为localhost的账号,如下:

mysql> use mysql
mysql> delete from user where user!='root' or host!='localhost';

3.2 关闭数据库

正常关闭的方式:

[root@mysql-db1 bin]# ./mysqladmin  -uroot -proot123 shutdown
Warning: Using a password on the command line interface can be insecure.
190614 16:27:16 mysqld_safe mysqld from pid file /data/mysql/mariadb.pid ended
[1]+  Done                    ./mysqld_safe --defaults-file=/etc/my.cnf

3.3 基础数据库的名称

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

库【information_schema】,可以理解为数据字典。

库【information_schema】用的比较多的表有:

INNODB_LOCKSINNODB_TRXINNODB_LOCK_WAITS这三张表用来监控数据库中锁的情况。

库【mysql】用到最多的就是user表,用于管理数据库中的用户的权限信息

3.4 找回数据库root用户密码

# 查询mysql进程
ps -ef|grep mysqld
mysql     15256  14553  0 16:30 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mariadb.log --open-files-limit=65535 --pid-file=/data/mysql/mariadb.pid --socket=/tmp/mysql.sock --port=3306
# 强制删掉mysqld进程
kill -9 15256 14553
# 跳过权限表重启数据库
 ./mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables &
# 进入mysql数据
./mysql

# 进入mysql库,并重置密码,password字段用authentication_string字段代替
update user set password=password('cheng') where user='root';
flush privileges;

4 创建报表平台库

4.1 创建一个CLOUD_REPORT数据库

# 创建一个数据库,字符集为UTF-8
CREATE DATABASE IF NOT EXISTS CLOUD_REPORT default charset utf8 COLLATE utf8_general_ci;
# 创建一个读写用户
CREATE user 'cloud_man'@'10.10.10.%' identified by 'cloud_man123';
grant select,insert,update,delete on CLOUD_REPORT.* to 'cloud_man'@'10.10.10.%' identified by 'cloud_man123';
# 创建一个读用户
create user 'cloud_read'@'10.10.10.%' identified by 'cloud_read123';
grant select on CLOUD_REPORT.* to 'cloud_read'@'10.10.10.%' identified by 'cloud_read123';
grant all privileges on soms.* to 'monitor'@'%' identified by 'monitor';
flush privileges;

创建一个opsmanage库

create database opsmanage DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'ops'@'%' IDENTIFIED  BY 'ops';
grant all on opsmanage.* to  'ops'@'%';

4.2 创建项目相关的表

4.2.1 项目基本信息表【cloud_project_base】

4.2.2 接口联系人表【cloud_project_connectors】

4.2.3 项目信息开销表【cloud_project_connectors】

4.2.x 常用SQL语句

4.3 创建网络相关的表

4.3.1 VPC基本信息表【cloud_vpc_base】

4.4 创建物理环境相关的表

4.4.1 设备型号表【】

4.4.2 设备信息表【】

4.5 创建虚拟资源相关的表

4.5.1 BCC资源信息表

4.5.2 XDB资源信息表

4.5.3 XMQ资源信息表

4.5.4 XCACHE资源信息表

4.5.5 BOS资源信息表

5. 安装Python环境

5.1 查看Python环境

CentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5

使用python -V命令查看一下是否安装Python:

[root@mysql-db1 ~]# python -V
Python 2.7.5

查看Python可执行文件的位置:

[root@mysql-db1 ~]# which python
/usr/bin/python

进入bin目录,可以看到可执行文件python指向python2,python2又指向python2.7也就是说Python命令执行的系统预装的Python2.7。,如下:

[root@mysql-db1 bin]# ll | grep python
-rwxr-xr-x. 1 root root      11232 Dec  2  2016 abrt-action-analyze-python
lrwxrwxrwx. 1 root root          7 Jun 12 18:34 python -> python2
lrwxrwxrwx. 1 root root          9 Jun 12 18:34 python2 -> python2.7
-rwxr-xr-x. 1 root root       7136 Nov  6  2016 python2.7

5.2 安装Python3.6.6

先安装Python相关依赖包

yum install zlib zlib-devel readline-devel sqlite-devel bzip2-devel openssl-devel gdbm-devel libdbi-devel ncurses-libs kernel-devel libxslt-devel libffi-devel python-devel zlib-devel openldap-devel sshpass gcc git -y

PerconaServer为MySQL数据库服务器进行了改进,在功能和性能上较MySQL有着很显著的提升。

yum install  http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
yum install Percona-Server-server-56 install Percona-Server-devel-56

下载Python3.6.6的包【Python-3.6.6.tar.xz】到/usr/local/src

[root@mysql-db1 ~]# cd /usr/local/src/
[root@mysql-db1 ~]# xz -d Python-3.6.6.tar.xz
[root@mysql-db1 ~]# tar xvf Python-3.6.6.tar
[root@mysql-db1 ~]# ./configure --prefix=/usr/local/python3
[root@mysql-db1 ~]# make all
[root@mysql-db1 ~]# make install
[root@mysql-db1 ~]# make clean
[root@mysql-db1 ~]# make distclean  

更新pip

[root@mysql-db1 ~]# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
[root@mysql-db1 bin]# pip3 list
Package    Version
---------- -------
pip        10.0.1 
setuptools 39.0.1 
[root@mysql-db1 ~]# pip3 install --upgrade pip
[root@mysql-db1 bin]# pip3 list
Package    Version
---------- -------
pip        19.1.1 
setuptools 39.0.1 

更改python命令的软连接

[root@mysql-db1 bin]# python -V
Python 2.7.5
[root@mysql-db1 bin]# mv /usr/bin/python /usr/bin/py2
[root@mysql-db1 bin]# py2 -V
Python 2.7.5
[root@mysql-db1 bin]# ln -s /usr/local/python3/bin/python3 /usr/bin/py3
[root@mysql-db1 bin]# py3 -V
Python 3.6.6

修改yum配置文件,把文件头部的#!/usr/bin/python改成#!/usr/bin/py2保存退出即可

#需如下两个文件一起修改,才可以使用yum
vi /usr/bin/yum
vi /usr/libexec/urlgrabber-ext-down

5.3 安装virtualenv

安装virtualenv,并且创建一个opsmanage的虚拟环境

[root@mysql-db1 local]# pip3 install virtualenv  -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
[root@mysql-db1 local]# ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
[root@mysql-db1 local]# ln -s /usr/local/python3/bin/virtualenv-clone /usr/bin/virtualenv-clone
[root@mysql-db1 local]# mkdir python-env
[root@mysql-db1 local]# cd python-env/
[root@mysql-db1 python-env]# pwd
/usr/local/python-env

启动OpsManage的虚拟环境:

[root@mysql-db1 OpsManage]# source bin/activate
(OpsManage) [root@mysql-db1 OpsManage]# deactivate

安装virtualenv的扩展包:virtualenvwrapper

 [root@mysql-db1 OpsManage]# pip3 install virtualenvwrapper  -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
 [root@mysql-db1 bin]# ln -s /usr/local/python3/bin/virtualenvwrapper.sh /usr/bin/virtualenvwrapper.sh

设置环境变量,把下面两行添加到~/.bashrc里。

export WORKON_HOME=/usr/local/python-env
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/py3
VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'
source /usr/bin/virtualenvwrapper.sh

测试创建两个env1 和 env2

# 创建env1
[root@mysql-db1 python3]# mkvirtualenv env1
# 查询所有虚拟环境
(env1) [root@mysql-db1 python3]# lsvirtualenv -b
env1
OpsManage
# 切换虚拟环境到OpsManage
(env1) [root@mysql-db1 python3]# workon OpsManage
(OpsManage) [root@mysql-db1 python3]# rmvirtualenv env1
# 列出虚拟site-packages的内容:
(OpsManage) [root@mysql-db1 python3]# lssitepackages
easy_install.py       pkg_resources  setuptools-41.0.1.dist-info
pip                   __pycache__    wheel
pip-19.1.1.dist-info  setuptools     wheel-0.33.4.dist-info
# 复制环境 env1 到 env2
(env1) [root@mysql-db1 bin]# cpvirtualenv env1 env2
Copying env1 as env2...
(env2) [root@mysql-db1 bin]# workon env2
(env2) [root@mysql-db1 bin]# lssitepackages
easy_install.py         pip-19.1.1.dist-info  setuptools-41.0.1.dist-info
numpy                   pkg_resources         wheel
numpy-1.16.4.dist-info  __pycache__           wheel-0.33.4.dist-info
pip                     setuptools
# 删除虚拟环境env2,在当前环境不能删除
(env2) [root@mysql-db1 bin]# rmvirtualenv env2
Removing env2...
ERROR: You cannot remove the active environment ('env2').
Either switch to another environment, or run 'deactivate'.
(env2) [root@mysql-db1 bin]# workon env1
(env1) [root@mysql-db1 bin]# rmvirtualenv env2
Removing env2...
(env1) [root@mysql-db1 bin]# lsvirtualenv -b
env1
OpsManage

5.4 安装OpsManage

下载OpsManage源码:

(env1) [root@mysql-db1 bin]# git clone -b v3 https://github.com/welliamcao/OpsManage.git
(env1) [root@mysql-db1 OpsManage]# workon OpsManage
(env1) [root@mysql-db1 OpsManage]# workon OpsManage
(OpsManage) [root@mysql-db1 OpsManage]# pip3 install  -r requirements.txt  -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

去掉中的如下包requirements.txt:

mysqlclient==1.3.13
mysql-replication==0.18

先安装依赖包:

[root@mysql-db1 tmp]# yum install mysql-devel python-devel
# 解决mysqlclient库文件找不到的问题
[root@mysql-db1 tmp]# yum install gcc mariadb-devel
(OpsManage) [root@mysql-db1 OpsManage]# pip install mysqlclient==1.3.13  -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
python -m pip install django-cms -i http://mirrors.aliyun.com/pypi/simple/
python -m pip install djangocms-installe -i http://mirrors.aliyun.com/pypi/simple/

6 安装redis

下载redis

# 进度cmdb项目目录
cd /usr/local/src
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar -xzvf redis-3.2.8.tar.gz
cd redis-3.2.8
make
# 安装到指定目录,默认在/usr/local/bin
make install
vim redis.conf
#######################
daemonize yes
daemonize yes
logfile "/var/log/redis/redis.log"
bind 127.0.0.1 10.10.10.128
#######################
(OpsManage) [root@mysql-db1 src]# mv redis-3.2.8 ../redis
(OpsManage) [root@mysql-db1 src]# /usr/local/redis/src/redis-server /usr/local/redis/redis.conf 
(OpsManage) [root@mysql-db1 src]# ps -ef|grep redis
root     106613      1  0 01:28 ?        00:00:00 /usr/local/redis/src/redis-server 127.0.0.1:6379
root     106617  61641  0 01:28 pts/3    00:00:00 grep --color=auto redis

7 安装rabitmq

yum install rabbitmq-server

8 配置OpsManage

8.1 修改配置文件

修改/usr/local/src/OpsManage/conf/opsmanage.ini

[db]
engine = mysql
host = 127.0.0.1
port = 3306
user = ops
password = ops
database = opsmanage


[redis]
host = 127.0.0.1
port = 6379
password =
ansible_db = 3
celery_db = 4
default_db = 0


[amqp]
host = 127.0.0.1
port = 5672
user = guest
password = guest


[ldap]
enable = false

[inception]
enable = false

8.2 初始化数据库

如果出现错误ImportError: cannot import name 'LDAPError'

pip3 uninstall python-ldap
pip3 install --upgrade python-ldap
py3 manage.py makemigrations OpsManage
py3 manage.py makemigrations wiki
py3 manage.py makemigrations orders
py3 manage.py makemigrations filemanage
py3 manage.py makemigrations navbar
py3 manage.py makemigrations databases
py3 manage.py makemigrations asset
py3 manage.py makemigrations deploy
py3 manage.py makemigrations cicd
py3 manage.py makemigrations sched

py3 manage.py migrate

8.3 创建管理员账号和密码

(OpsManage) [root@mysql-db1 OpsManage]# py3 manage.py createsuperuser
Username (leave blank to use 'root'): cheng33x
Email address: zxcheng@chinaums.com
Password: 
Password (again): 
The password is too similar to the email address.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

8.4 启动服务

(OpsManage) [root@mysql-db1 OpsManage]# py3 manage.py runserver 0.0.0.0:8000
Performing system checks...

System check identified no issues (0 silenced).
July 12, 2019 - 01:58:10
Django version 2.1.4, using settings 'OpsManage.settings'
Starting ASGI/Channels version 2.1.6 development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
2019-07-12 01:58:10 [INFO] server.py[line:106] HTTP/2 support not enabled (install the http2 and tls Twisted extras)
2019-07-12 01:58:10 [INFO] server.py[line:113] Configuring endpoint tcp:port=8000:interface=0.0.0.0
2019-07-12 01:58:10 [INFO] server.py[line:144] Listening on TCP address 0.0.0.0:8000

9. Pycharm远程配置

因为OpsManage很多功能需要在CentOS中运行,所以需要借助PyCharm来搭建一个Windows环境下开发、Linxu环境下调试的这么一套环境

# C:\Windows\System32\drivers\etc
10.10.10.128 centos.mysql.db1.vm

10. 开发测试环境

ip = 172.27.34.137
hostname = cmdb-develop
user = root
password = changeme
url = http://172.27.34.69/dashboard
domain = default
user = zxcheng
password = changeme

X 遇到的异常问题

x.1 虚拟机的网卡服务突然失效


[root@mysql-db1 network-scripts]# systemctl restart network
Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details.
[root@mysql-db1 network-scripts]# systemctl status network
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2019-06-14 10:09:23 CST; 20s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 3815 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=1/FAILURE)

系统自带的NetworkManager这个管理套件有关系,关掉就可以解决。

# 停用网络管理套件
systemctl stop NetworkManager
# 禁止开机启动
systemctl disable NetworkManager
# 重启网络服务
systemctl start network.service

X.2 初始化数据库,缺少模块

FATAL ERROR: please install the following Perl modules before executing ./mysql_install_db:
Data::Dumper
# 安装autoconf库
yum -y install autoconf

X.3 git下载项目的时候出错

X1@ZXCHENG-X1 /cygdrive/d/proWork-win/git-download
$ git clone https://github.com/open-cmdb/cmdb.git
Cloning into 'cmdb'...
fatal: unable to access 'https://github.com/open-cmdb/cmdb.git/': SSL certificate problem: unable to get local issuer certificate
#关闭git的证书验证
git config --global http.sslVerify false

X.4 yum 安装Percona MySQL时,提示错误

The GPG keys listed for the "Percona-Release YUM repository - x86_64" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.


 Failing package is: Percona-Server-client-56-5.6.43-rel84.3.el7.x86_64
yum update percona-release

X.5 安装mysqlclient出现“ /usr/bin/ld: cannot find -lmysqlclient”的错误;

    gcc -pthread -shared build/temp.linux-x86_64-3.6/_mysql.o -L/usr/lib64 -lmysqlclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl -o build/lib.linux-x86_64-3.6/_mysql.cpython-36m-x86_64-linux-gnu.so
    /usr/bin/ld: cannot find -lmysqlclient
    collect2: error: ld returned 1 exit status
    error: command 'gcc' failed with exit status 1
cd /usr/lib64
# 创建软链接
ln -s ./mysql/libmysqlclient.so.18.0.0 ./libmysqlclient.so
# 如果上面这个不行,则
ln -s ./mysql/libmysqlclient.so.18.0.0 ./mysqlclient.so
上一篇下一篇

猜你喜欢

热点阅读