一、DevOps 之 GitLab 的 CI

DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

1.安装git

#yum -y install git
#git version
git 命令常见用法:
git help <子命令>    #不加<子命令>是查看git命令的帮助
git <子命令> --help  #不加<子命令>是查看git命令的帮助
git version         #查看版本
git init            #本地仓库初始化
git init --bare     #创建无工作区的祼仓库,适用于充当远程仓库,一般对应的目录以.git为后缀
git clone http://url             #克隆url指定的项目的所有文件,并在本地创建此项目的git仓库
git clone -b develop http://url  #克隆url指定的项目中develop分支
git clone -b tag http://url      #克隆url指定的项目中tag
git config --global user.name "zhouhao" #设置当前用户的git全局用户名,和下面两项都存放在~/.gitconfig文件中
git config --global user.email "xxx@qq.com" #设置全局邮箱
git config --global color.ui true   #让Git显示颜色,会让命令输出看起来更醒目
git config --global core.editor vim #git默认的编辑器为nano,不常用,需要修改为vim
git config --global --list|-l       #列出用户全局设置,默认保存在~/.gitconfig文件中
git config --global -e    #交互编辑配置
git add index.html / .    #添加指定文件、目录或当前目录下所有数据到暂存区
git rm --cached file      #只删除暂存区的文件,不删除工作区文件,相当于git add 反操作
git rm file               #从删除工作目录和暂存区删除文件
git checkout file         #从暂存区复制文件到工作目录
git restore file          #新版EXPERIMENTAL命令,可以恢复修改的工作区文件
git ls-files              #查看暂存区文件,选项-s显示mode bits, object name and stage number,-o显示untracked文件
git cat-file -p <blogid>  #查看仓库对象的内容,仓库对象存放在.git/objects目录下
​
git diff [file]            #对比工作区和暂存区的区别
git diff --cached file     #对比暂存区和本地仓库的区别
git diff <commit> -- <path> #对比工作区和指定提交的区别
git diff <commit> <commit> -- <path>  #提交和提交之间的区别
​
git commit -m “comment“   #提交文件到工作区
git commit -am "comment"  #添加所有修改(不包括新文件)到暂存区并提交,相当于git add + git commit
git commit --amend --no-edit    #重新覆盖上次的提交
git commit --amend -m "comment" #重新提交,覆盖上次的提交
​
git status    #查看工作区的状态
git log -p    #查看每次提交的变化
git log  --pretty=oneline
git log --oneline -1     #查看最近一条commit日志
git log origin/main      #查看远程仓库的日志
git reflog               #查看分支或其它引用在本地仓库的完整历史记录
git reset --hard HEAD^^  #git版本回滚, HEAD为当前版本,加一个^为上一个,^^为上上一个版本
git reset --hard HEAD~n  #回滚前n个版本
git reset --hard 5ae4b06 #回退到指定id的版本,使用 git reflog 获取每次提交的ID
git reset --hard v1.0
git branch     #查看分支及当前所处的分支
git branch -av #查看所有本地和远程分支
git branch <分支名>     #创建分支<分支名>
git branch <分支名> <commit_id> #基于指定提交创建新分支
git branch -d <分支名>  #删除分支
git branch -m dev develop  #修改分支名dev为develop
git branch -M main         #修改当前分支名称为main
git checkout <分支名>       #切换到已有的分支
git checkout v1.0          #切换至指定标签v1.0
git checkout -b <分支名>    #创建并切换到一个新分支
git checkout -b <分支名> origin/<分支名> #利用服务器远程仓库的分支,同步在本地创建分支
git checkout [<commit>]-- <file> ...   #找回在工作区删除的已存入暂存区或提交的文件
git merge master -m "mastertodev"      #将master分支合并至当前分支,无选项-m, 则为交互式
​
git tag v1.0                       #当前状态创建标签
git tag -a v1.0 b720aaf -m "v1.0"  #将指定commit创建标签
git tag -d v1.0             #删除标签
git reset --hard v1.0       #回滚到指定标签
git tag        #查看标签
git show v1.0  #查看标签
​
git remote -v            #查看远程仓库
git remote show origin   #查看远程仓库详细信息
git remote add origin git@gitlab.example.com:testgroup/testproject.git #建立远程仓库和本地origin关联
git remote rename origin old-origin   #修改名称
git remote remove origin              #删除关联
​
git push                   #将本地仓库提交代码到远程服务器
git push origin master     #将当前分支推送到远程的 master 分支
git push origin dev        #将当前分支推送到远程的dev分支,如果远程没有dev会自动创建
git push -u origin master  #将本地 master 分支推送到远程仓库 master,并且参数-u表示以后即可直接用git push 代替此命令
git push origin main:dev   #将本地main分支推送至远程dev分支
git push origin :dev       #将空分支推送到远程dev,即删除远程dev分支
git push origin v1.0       #将本地仓库v1.0的tag推送到远程
git push -u origin --all   #推送所有分支
git push origin --tags     #将本地仓库所有的tag都推送到远程
git push origin --tag v1.0 #只推送指定的tag到远程
git pull                   #从远程服务器获取代码到本地仓库,并合并到本地仓库
git pull origin dev        #从远程服务器分支dev拉取代码到本地仓库
git fetch                  #从远程仓库获取最新版本,不合并至本地仓库
vim .gitignore             #定义忽略文件,即不放在仓库的文件


2.GitLab相关的目录:

  • /etc/gitlab #配置文件目录
  • /run/gitlab #运行目录,存放很多的数据库文件
  • /opt/gitlab #安装目录
  • /var/opt/gitlab #数据目录,源代码就存放在此目录
  • /var/log/gitlab #日志目录

3.安装GitLab

  • 下载GitLab #wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.5.10-ce.0.el7.x86_64.rpm

#yum localinstall gitlab-ce-12.5.10-ce.0.el7.x86_64.rpm -y

  • vim /etc/gitlab/gitlab.rb #修改如下 external_url 'http://gitlab.myx.org'

  • vim /etc/hosts #新增下面一行内容 10.0.0.10 gitlab.myx.org

  • 每次修改完配置文件都需要执行此操作 [root@ubuntu1804 ~]#gitlab-ctl reconfigure

  • 新开一个窗口键入指令,监控内存状态 [root@ubuntu1804 ~]#watch free -h

  • 验证 GitLab 启动完成 #gitlab-ctl status

  • 验证端口及状态

ss -ntl

4.gitlab的常用命令

gitlab-rails #用于启动控制台进行特殊操作,如修改管理员密码、打开数据库控制台(gitlab-rails dbconsole)等 gitlab-psql  #数据库命令行 gitlab-rake  #数据备份恢复等数据操作 ​

  • 客户端命令行操作行
gitlab-ctl 
gitlab-ctl reconfigure  #修改过配置后需要执行重新配置
gitlab-ctl stop         #停止gitlab
gitlab-ctl start        #启动gitlab
gitlab-ctl restart      #重启gitlab
gitlab-ctl status       #查看组件运行状态
gitlab-ctl tail         #查看所有日志
gitlab-ctl tail nginx   #查看某个组件的日志
gitlab-ctl service-list #列出服务

5.上传项目到仓库

cd <要上传文件目录>
git init
git remote add origin http://gitlab.myx.org/root/myx02_project.git
git add .
git commit -m "Initial commit"git push -u origin master

6.拉取项目到本地 > 推送至远程

  • 切换到分支 'dev' [root@centos7 ~/meta-project]#git checkout dev
  • 拉取最新代码 [root@centos7 ~/meta-project]#git pull origin dev
  • 等价于 git fetch origin dev git merge origin/dev
  • 继续开发 [root@centos7 ~/meta-project]#cat index.html [root@centos7 ~/meta-project]#vim index.html [root@centos7 ~/meta-project]#git add .
  • 提交代码 [root@centos7 ~/meta-project]#git commit -m '在家加班,增加AI功能'
  • 推送至远程仓库 [root@centos7 ~/meta-project]#git push origin dev

7.SSH实现免密码登录

#生成公钥和私钥(默认放在 ~/.ssh目录下,id_rsa.pub公钥、id_rsa私钥) ssh-keygen

  • 拷贝公钥的内容,并设置到gitee或github中 [root@myx04 ~]# cat /root/.ssh/id_rsa.pub

  • 在git本地中配置ssh地址 git remote add origin git@gitlab.myx.org:root/myx01_project.git

  • 以后使用以下即可 git push origin master

二、MySQL数据库

概念:数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。

1.分类:

RDBMS关系型数据库:

MySQL,Oracle,MarIDB,SQL server

NoSQL非关系型数据库:

redis mencache,MongoDB,Cassandra,ES

NewSQL新型分布式数据库:

spaner(谷歌) TiDB(淘宝)polarDB(阿里)

2.MySQL安装方式:

源代码:编译安装 二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用 程序包管理器管理的程序包:yum安装,apt安装

3.MySQL5.7版本设置数据库简单密码方法如下:

#设置参数 set global validate_password_policy=LOW; #关闭检查密码复杂性

set global validate_password_length=6; #设置管理员密码长度 ​ #设置密码 mysql> select user() ;

ALTER USER USER() IDENTIFIED BY '123456'; 或者写成 alter user root@localhost identified by "123456";

4.MySQL8.0版本设置数据库简单密码方法如下:

set global validate_password.policy=LOW; set global validate_password.length=6; ALTER USER USER() IDENTIFIED BY '123456'; 数据库用户身份分为三类:管理员、系统用户、普通用户

5.MySQL用户管理操作

  • 创建MySQL用户,设置登录密码 (关键字:create) create user xiaom@'10.0.0.%' identified by '123'; ​
  • MySQL8.0以前,可以自动创建用户并授以权限 (关键字:grant) grant all on . to xiaom@'10.0.0.%' identified by '123'; ​
  • 查询用户 (关键字:select) select user,host from mysql.user; ​
  • 删除用户 (关键字:drop) drop user xiaom@'10.0.0.%';

6.修改密码:

  • 新版mysql中用户密码可以保存在mysql.user表的authentication_string字段中, 如果mysql.user表的authentication_string和password字段都保存密码,authentication_string优先生效

#方法1

#MySQL 8 版本不支持此方法
SET PASSWORD FOR 'user'@hostlocal = PASSWORD('password');
#MySQL 8 版本修改密码
alter user test@'%' IDENTIFIED BY 'centos'; 

​ #方法2

UPDATE mysql.user SET password=PASSWORD('password') WHERE clause;
​
#mariadb 10.3
update mysql.user set authentication_string=password('ubuntu') where user='mage';
​
#此方法需要执行下面指令才能生效:
FLUSH PRIVILEGES;

7.MySQL权限列表

MySQL普通用户授权如下

SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, 
ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, 
REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
​
ALL                     # 对用户授权于以上权限,一般普通管理员拥有此权限
with grant option       # 可以对其他用户授权的权限,一般本地超级管理员拥有此权限,此权限只能写在授权命令grant最后

8.用户授权命令格式

MySQL 7.0+ 版本:grant命令既可以授予权限,又可以创建用户设置密码 
grant 权限列表 on 作用目标 to 授权用户 identified by 密码;

# MySQL 8.0 版本:建用户和授权分开了,grant 不再支持自动创建用户了,不支持改密码,授权之前,必须要提前创建用户。
grant 权限列表 on 作用目标 to 授权用户;

作用目标格式

1.MySQL所有数据库下所有数据表授权给用户:

2.针对MySQL一个数据库下所有表授权给用户: 数据库

3.只对MySQL下单独的某张数据表授权给用户: 数据库.数据表

9.查看用户授权情况

  • 查看用户权限: show grants for 用户; mysql> show grants for wordpress@'10.0.0.%';

10.回收用户权限

# 回收用户权限: revoke 权限 on 授权的数据库/数据表 from 用户;
# 回收wordpress用户对wordpress数据库的delete权限
mysql> revoke delete on wordpress.* from wordpress@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
​
mysql> show grants for wordpress@'10.0.0.%';

11.回收用户的授权权限 grant option

mysql> GRANT ALL ON *.* TO xiaom@'10.0.0.%' IDENTIFIED BY '123456' WITH GRANT OPTION;

mysql> show grants for xiaom@'10.0.0.%';​

mysql> REVOKE GRANT OPTION ON *.* from xiaom@'10.0.0.%';

12.MySQL5.7基本初始化配置文件模板

# MySQL服务端配置
[mysqld]
# 指定MySQL管理用户
user=mysql
# 指定MySQL安装路径
basedir=/app/mysql
# 指定MySQL数据存放路径
datadir=/data/mysql/data
# 指定MySQL的socket文件存放在服务端路径
socket=/tmp/mysql.socket
# 配置MySQL主从复制,数值 1 ~ 65535
server_id=6
# MySQL服务端口
port=3306
​
# 客户端配置
[mysql]
# 指定MySQL的socket文件存放在客户端路径
socket=/tmp/mysql.socket

13.TCP/IP 连接数据库

# mysql连接数据库参数
-u       # 指定登录用户
-h       # 指定登录数据库服务器IP地址或者本地登录localhost
-p       # 指定登录用户密码
-P       # 指定连接数据库端口,-P参数必须配合-h
-e       # 免交互执行SQL语句
-S       # 本地登录指定socket文件
<                # 导入数据,常常用于恢复数据
​
# TCP/IP登录数据库
[root @db01 ~ ]# mysql -uxiaom -h10.0.0.51 -p123456 -P3306
​
# TCP/IP连接数据库,只是用-P指定端口,默认以本地localhost连接
[root @db01 ~ ]# mysql -uxiaom  -p123456 -P3306

​
# 免交互执行SQL语句
[root @db01 ~ ]# mysql -uxiaom -h10.0.0.51 -p123456 -P3306 -e 'select user,host from mysql.user;'

14.创建数据库语法

CREATE { DATABASE|SCHEMA } [IF NOT EXISTS] 'DB_NAME'
CHARACTER SET 'character set name'
COLLATE 'collate name'; 
​
#创建数据库
CREATE DATABASE <库名> CHARSET <字符集> COLLATE <排序规则>;
​
#判断数据库是否存在,如果数据库已存在不会创建,如果数据库不存在则会创建
CREATE DATABASE IF NOT EXISTS <库名> CHARSET <字符集> COLLATE <排序规则>;

15.范例:使用mysql数据库默认字符集创建数据库

mysql> create database db01;
​
mysql> show create database db01;
#创建数据库字符集信息会存放到数据库对系统目录下 db.opt文件中
[root@centos7 ~ ]# cat /data/mysql/data/db01/db.opt
default-character-set=latin1
default-collation=latin1_swedish_ci
​
#当db01数据库已经创建,再次执行创建db01数据库SQL语句会报错
mysql> create database db01;
ERROR 1007 (HY000): Can't create database 'db01'; database exists
​
#创建数据库判断
mysql> create database if not exists db01;
Query OK, 1 row affected, 1 warning (0.00 sec)      #1条警告信息
​
#如果创建数据库时判断其数据库是否存在,如果存在会产生一条警告信息,查看数据库警告信息
mysql> show warnings\G
*************************** 1. row ***************************
  Level: Error
   Code: 1064
Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'warning' at line 1

16.范例:指定字符集创建新数据库

mysql> create database IF NOT EXISTS db02 CHARACTER SET 'utf8';
​
[root@centos7 ~ ]# cat /data/mysql/data/db02/db.opt
default-character-set=utf8
default-collation=utf8_general_ci

17.修改数据库语法

  • 修改字符集
ALTER DATABASE <库名> character set <字符集> collate <排序规则>;

18.范例:修改db01数据库的字符集

mysql> alter database db01 character set utf8;
Query OK, 1 row affected (0.00 sec)
​
mysql> show create database db01;
删除数据库语法删除数据库区分大小写
DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME'; 
mysql> show databases;
mysql> drop database DB2;
ERROR 1008 (HY000): Can't drop database 'DB2'; database doesn't exist
​
mysql> drop database db2;
Query OK, 0 rows affected (0.03 sec)
19.MySQL中的系统数据库
数据类型:数字,字符串,时间,二进制

20.创建数据表

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 数据表名(
字段1  属性(数据类型、约束、其他属性),
字段2  属性(数据类型、约束、其他属性),
字段3  属性(数据类型、约束、其他属性)
)ENGINE 存储引擎 CHARSET 排序规则 COMMENT 注释;

三、MySQL 集群 Cluster

21.服务性能扩展方式:

  • Scale Up,向上扩展,垂直扩展
  • Scale Out,向外扩展,横向扩展

22.MySQL的扩展:

读写分离

  • 复制:每个节点都有相同的数据集,向外扩展,基于二进制日志的单向复制

  • 复制的作用:数据分布、负载均衡读操作、备份、高可用和故障切换、MySQL升级测试

  • 复制架构:一主一从(一Master/一Slave),一主多从,主从复制,一主从下跟从,环状复制、Master/Master

++23.实现主从复制配置:++

[root@master ~]#vim /etc/my.cnf
#[mysqld]下新增下面两行
server-id=8
log-bin
​
[root@master ~]#systemctl start mariadb
[root@master ~]#systemctl enable mariadb
​
[root@master ~]#mysql
#查看二进制文件和位置
​
MariaDB [(none)]> show master logs;
​
#创建复制用户
MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.3.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
#从节点
[root@slave ~]#yum install mariadb-server -y
[root@slave ~]#vim /etc/my.cnf
#[mysqld]下添加下面一行
server-id=18
​
[root@slave ~]#systemctl restart mariadb
[root@slave ~]#systemctl enable mariadb
​
[root@slave ~]#mysql
MariaDB [(none)]> help change master to
​
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.3.17',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='123456',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='mariadb-bin.000001',
    -> MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.00 sec)
​
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show slave status\G
******************************************************************************
             Slave_IO_Running: Yes    #IO线程是yes
            Slave_SQL_Running: Yes    #SQL线程是yes
        Seconds_Behind_Master: 0          #复制的延迟时间******************************************************************************
#验证主从复制
#主库导入数据
[root@master ~]#mysql < testdata.sql
[root@master ~]#mysql
​
#从库验证数据同步情况
[root@slave ~]#mysql
MariaDB [(none)]> show databases;

24.++数据库常用指令++:

查看数据库:SHOW DATABASES;
创建数据库:CHER DATABASE 数据库名;
删除数据库:DROP DATABASE 数据库名;
切换数据库:USE 数据库名;
查看数据表:SHOW TABLES;
创建数据表:CREATE TABLE 表名 ( 列1 数据类型, 列2 数据类型, ... );
删除数据表:DROP TABLES 表名;
创建用户:CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
删除用户:DROP USER '用户名'@'主机';