美文网首页
第一章 Mysql的安装与配置

第一章 Mysql的安装与配置

作者: 武漂的小丙 | 来源:发表于2019-08-23 14:27 被阅读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 系统环境调整

    • 关闭selinux,需要重启系统
    [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
    
    
    • swap分区设置:建议不分配swap空间或者给4GB空间
    # 查看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
    
    • numa(Non-Uniform Memory Access)需要关闭

      numa架构默认的内存分配方案就是:优先尝试在请求线程当前所处的CPU的Local内存上分配空间。如果local内存不足,优先淘汰local内存中无用的Page(Inactive,Unmapped)。

      几乎所有的运维都会多多少少被NUMA坑害过,“因为CPU亲和策略导致的内存分配不平均”及“NUMA Zone Claim内存回收”有关,参考:https://my.oschina.net/u/658658/blog/415223?p={{currentPage-1}}

    # 安装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】用的比较多的表有:

    • tables: 记录所有表的基本信息,访问该表可搜集表的统计信息;
    • PROCESSLIST:查看当前数据库的连接
    • GLOBAL_STATUS:查看数据库运行的各种状态值
    • GLOBAL_VARIABLES:查看数据库中的参数
    • PARTITIONS:数据库中表分区的情况

    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环境下调试的这么一套环境

    • 为了配置方便,将CentOS的IP地址改为hostname访问,修改Windows配置如下:
    # C:\Windows\System32\drivers\etc
    10.10.10.128 centos.mysql.db1.vm
    
    • 在PyCharm的“Default Settings->Default Project->Project Interpreter”,新增“centos.mysql.db1.vm”的远程Python环境

    10. 开发测试环境

    • 虚机信息登录信息:
    ip = 172.27.34.137
    hostname = cmdb-develop
    user = root
    password = changeme
    
    • openstack管理端:
    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
    

    相关文章

      网友评论

          本文标题:第一章 Mysql的安装与配置

          本文链接:https://www.haomeiwen.com/subject/dguzsctx.html