Linux

Linux命令笔记

Linux下的特殊符号

[root@Maykee ~]# :#号是超级管理员对应的命令行
[egon@Maykee ~]$ :$号是普通用户对应的命令行
@为分隔符
@之前为当前登陆的用户 - (whoami)
@之后为当前的主机名称 - (hostname)
主机名称之后为当前用户所在的路径: ~为家目录,/为根目录

通配符:
  * : 任意个数任意字符
  ? : 1个任意字符
  []: 匹配中括号内的任意一个字符
  {}: 括号内用..隔开表示生成序列,用逗号隔开表示多个数据
  ! : 取反
  '': 使用echo输出时若使用单引号则将引号内原封不动的输出到屏幕
  "": 使用echo输出时会先尝试解析执行引号内的特殊符号,若存有特殊符号         且解析不到时会输出空
  ``: 会将引号内当做命令进行执行
  ; : 命令结束符
  # : 注释内容
  | : 管道
  $ : 在命令中使用代表取值
  \ : 逃脱符,将有特殊含义的字符转译成一个普通的字符
  & : 将指令放入后台运行,不会影响前台继续操作命令
  &&: python中的and
  ||: python中的or
   
特殊符号:
重定向特殊符号:
      0 表示标准输入(stdin),配合<或<<使用,数据流从右向左
  python test.py 0>>filename(将不报错的输出信息输出到指定文件中)
  1个>表示覆盖, 2个>表示追加
      1 表示标准输出(stdout),配合>或>>使用,数据流从左向右
  python test.py 1>>filename(将不报错的输出信息输出到指定文件中)
  1个>表示覆盖, 2个>表示追加
      2 标准错误(stderr),配合>或>>使用,数据流从左向右
  python test.py 2>>filename(将不报错的输出信息输出到指定文件中)
  1个>表示覆盖, 2个>表示追加
  python test.py 1>>filename1 2>>filename2
  (将正常输出的信息输出到文件1,错误的输出信息输出到文件2)

命令行常用快捷键

ctrl + c   终止当前正在进行的操作 
ctrl + l   清空当前屏幕 - (clear)
ctrl + d   退出当前用户
ctrl + r   查看(历史命令) - (history|grep)
ctrl + a   把光标移动到行首
ctrl + e   把光标移动到行尾
ctrl + u   把光标到行首的内容删除/剪切
ctrl + y   粘贴
delete     光标所在处从前往后删除内容
ctrl + k   把光标到行尾的内容删除/剪切
ctrl + → 向右移动一个单词
ctrl + ← 向左移动一个单词
ctrl + s   锁屏
ctrl + q   解锁  
ctrl + w   删除当前位置至上一个空格的字符

帮助信息

man 命令:获取该命令的所有帮助信息
命令 --help:获取精简版的命令帮助信息
info 命令:获取更为详细的命令帮助信息

也可以使用搜索引擎网站来获取命令帮助信息。如:百度,谷歌,搜狐等。
命令详解的网址
http://man.linuxde.net
http://liunx.web3.xin
http://linux.51yip.com

关机/重启/注销命令相关

重启:
shutdown -r 10   10分钟之后重启
shutdown -r 0     立刻重启
shutdown -r now   立刻重启
reboot             立即重启
init 6             立即重启
关机:
  shutdown -h 10     10分钟之后关机
  shutdown -h 0     立刻关机
  shutdown -h now   立刻关机
  poweroff           立即停止系统并关闭电源
  init 0             立即关机
  half               立即停止系统但需要人工关闭电源
注销:
logout
exit
取消关机/重启:
shutdown -c

显示系统IP地址

ifconfig           显示所有网卡的IP地址
ifconfig eth0/1   显示某块网卡的IP地址
ip a               显示所有网卡的IP地址
ip a s eth0/1     显示某块网卡的IP地址
hostname -I       显示所有IP地址(只有IP信息)
hostname -i       显示外网IP地址(只有IP信息)

Linux中配置环境变量

临时生效:

当前登陆用户:

永久生效:

文件及目录命令

cd:
cd/cd~ : 切换到当前用户的家目录
cd.   : 保持当前目录不变
cd..   : 切换到上级目录
cd -   : 切换到上次所在目录
cd /   : 切换到根目录
mkdir:
mkdir test               : 创建一个目录/文件夹
mkdir -p test1/test2     : 递归创建目录,可以连续创建多个目录
mkdir -m                 : 设置新目录默认对应的权限
mkdir -v                 : 创建目录后给出提示
mkdir {test1,test2,test3}: 一次性创建多个目录
mkdir test{1..10}       : 一次性创建多个连续的目录
  括号内可以是连续的数字或字母
touch:
touch test.txt           : 创建一个文件(相对路径)
touch test/test1/test2.txt: 创建一个文件(绝对路径)
touch {1..10}.txt         : 创建多个连续的文件
touch test{1..10}.txt     : 创建多个连续的文件
                          括号内可以是连续的数字或字母

ls/ll - 显示目录下内容及属性信息的命令

ls -a /etc: 显示指定目录下所有子目录与文件,包括隐藏文件. 
ll /etc   : 以列表形式显示目录的详细信息,是ls -l的缩写
ll -h /etc: 以人性化方式显示文件大小,以K/M/G为单位
ll -t /etc: 根据最后修改时间排序,默认是以文件名排序
ls -d /etc: 显示目录本身的信息而不是显示目录的内容
ls -r /etc: 倒序排序
ls -lt /etc: 按照时间进行排序
ls -lrt /etc: 找出最新的文件

cp - 复制文件或目录

cp 源文件 目标地址 : 基础复制文件
cp -r 源文件夹 目标地址 : 递归复制目录下的所有层级的子目录与文件
cp -p 源文件 目标地址 : 复制时保持目标文件属性不变
cp -d 源文件 目标地址 : 复制时保持软链接
cp -a 源文件夹 目标地址 : 等同于-r-p-d三种方法
cp -t 源文件 目标地址 : 将所有源参数复制到指定目录

mv - 移动或重命名文件跟目录

mv 源文件 目标地址 : 基础移动文件
mv 源文件  newname: 为源文件重命名

rm - 删除文件或目录

rm -f 目标文件 : 强制删除,没有提示
rm -r 目标文件夹 : 删除整个目录,删除目录时必须加r,一次性可删除多个目录
rm -i 目标文件 : 在删除前需要确认,不能与-f联合使用

echo - 显示输出文本内容

echo hello world : 将echo后的内容输出到屏幕
echo hello>> 文件名: 将echo后的内容追加到文件末尾
echo hello> 文件名 : 将echo后的内容覆盖至文件

alias - 起别名


cat - 合并文件或查看文件内容

cat filename : 查看文件内容
cat -b filename : 查看文件内容时显示行编号(忽略空行)
cat -n filename : 查看文件内容时显示行编号(不忽略空行)
cat -A filename : 查看文件内容时在每行的最后添加$符号
cat > filename : 清空文件内容

cat > filename <<end
hello world  : 创建一个文件并写入内容,若文件存在则覆盖文件内容
end

cat >> filename <<end
hello world  : 创建一个文件并写入内容,若文件存在则在末尾追加内容
end

more/less - 分页显示文件内容

more filename : 分页显示文件内容
                空格 - 下一页
                b - 上一页 
                q - 退出
                到最后一行直接退出
                
less filename : 分页显示文件内容
                空格 - 下一页
                b - 上一页 
                q - 退出
                到最后一行不会直接退出
                filename前加-N为显示行号

head/tail - 显示文件头部或尾部

head -n5 filename : 显示文件前5行
tail -n5 filename : 显示文件后5行

-f --follow : 显示文件实时更新(eg:操作日志)
-f --follow --retry : 如果文件不存在会不断进行重试

grep - 文本过滤工具(三剑客1)


tr - 替换或删除字符


file - 显示文件的类型

file 文件名 : 可查看该文件的类型

which - 显示命令的全路径

which 命令 : 显示输出命令所在的绝对路径

whereis - 显示命令及其相关文件全路径

whereis 命令 : 显示命令所在的路径以及与其相关的所有文件路径
			  包括源码,二进制文件,帮助手册等相关文件路径

find - 查找目录下的文件

find filename : 根据文件名快速查找文件,默认在当前目录下查找
-maxdepth num : 最大查找的层数,一定要放在最前面,1表示该目录下一层
-type f d l: f(文件),d(文件夹),l(链接文件)
-name : 文件名
-iname: 文件名(忽略大小写)
-size +1M -100K : 根据文件大小查找
-mtime +day -day : 根据最后更新时间查找文件,单位为天
-ctime +day -day : 根据创建时间查找文件,单位为天

示例:
find / -type f -size +1M -iname "*.txt" | xargs ls -lh
## 筛选出以.txt结尾且文件大小大于1M的文件,并格式化显示

find /root/ -mtime +3 -name "*" | xargs ls -lh
## 筛选出根目录下3天以前创建的所有文件并格式化显示

find /root/ -type f -name "*.txt" | xargs cp -t /tmp/
## 筛选出根目录下所有以.txt结尾的文件拷贝到tmp目录下


xargs - 将标准输入转换成命令行参数

seq 10 > a.txt : 在a.txt文件中生成10个有序数字,每个数字独占一行

xargs -n2 < a.txt : 将a.txt文件中的内容两个两个分成一组,
                    不带 -n则全部分为一组

tar - 打包压缩命令

tar的四个参数:zcvf
	z:表示通过gzip软件进行压缩
	c:表示创建压缩包
	v:表示显示创建压缩包和解压的过程
	f:表示指定压缩包(f一定要放在这几个参数后)
压缩示例:
	tar -zcvf /tmp/test.tar etc
	## 将根路径下的etc文件压缩,并将压缩包放入tmp下
	tar -zcvf /tmp/test.tar --exclude filename ~/
	## 将家目录下除了filename的其他文件压缩到tmp下的test.tar
解压示例:
	tar -xf /tmp/test.tar -C ~/test
    ## 将tmp下的test压缩包解压到家目录下的test目录下
    ## 不指定解压目录则解压到当前目录
***
在压缩时不建议使用绝对路径,通常cd到要压缩的文件目录再进行压缩

zip - 打包压缩命令

压缩示例:
zip -r /tmp/test.zip etc
## 压缩当前目录下的etc并将压缩包放入tmp下
zip -rq /tmp/test.zip etc
## q表示安静模式,即不显示压缩过程

unzip -d /tmp/test_zip /tmp/test.zip
## 将tmp下的test.zip解压到tmp下的test_zip目录下

date - 显示与设置系统时间

date : 系统默认时间格式 Mon May 6 11:09:44 CTS 2019
date +%F : 通用时间格式 2019-05-06
date +%T : 当天时间 11:10:04
date -d  "1 day/week/month" : 一天/周/月之前的时间,减号代表之前
date -s "20190601 12:12:12" : 设置时间,不设置具体时间可以不加引号

ntpdate - 让Linux系统自动同步网络时间

yum install ntpdate -y
执行:
ntpdate ntp1.aliyun.com

用户及用户组相关命令

添加普通用户:
	useradd username (系统会自动为该用户分配用户id与用户组id)
手动指定用户id或用户组id:
	useradd -u 501~65535区间 username
	useradd -g 1001 username
指定用户的shell命令解释器
	useradd -s nologin username
创建虚拟用户
	useradd -M username (不会创建家目录)
创建用户时为其添加说明信息
	useradd -c username
为创建的用户设置登陆密码
	echo 密码 | passwd --stdin username
查看用户id与用户组id信息:
	id username
切换用户:
	su - username (不加-表示临时切换,由root用户进行切换时输出$PATH                    不会改变路径)
	su - username -c "pwd" (切换用户并执行命令)
删除用户:
	userdel username (只删除用户信息不删除家目录信息)
	userdel -r username (删除用户家目录及用户所有信息)
	若该用户被某个进程所使用则可执行 (kill -9 进程编号)后再进行删除
修改用户信息:
	usermod -u 10000 username (修改用户id)
	usermod -g 10001 username (修改用户组id)
创建用户组:
	groupadd -g 10002 groupname (创建并指定用户组id)
删除用户组:
	groupdel groupname (不能删除还有用户归属的用户组)

软硬链接的创建

创建硬链接:
	ln 源文件 硬链接文件名
创建软连接:
	ln -s 源文件 软连接文件名

节点与Block容量不足的解决

统计文件个数:
	ls | wc -l
查看节点使用率:
	df -i(inode)
统计目录下所有1G以上的文件的容量:
	du /* -sh | grep G
节点容量不足时要将一些无用的小文件进行统一删除:
	find / -size -1b -name "*.txt"
Block容量不足时要将一些无用的大文件进行统一删除

正则表达式

'''
详见Linux详细文档第12章节
'''

CentOS中安装python3

wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

tar -xvJf  Python-3.6.2.tar.xz

cd Python-3.6.2

./configure prefix=/usr/local/python3

make && make install

执行上面的命令时若报错:zipimport.ZipImportError: can't decompress data
https://blog.csdn.net/u014749862/article/details/54430022

安装完成后将pip添加至环境变量
https://blog.csdn.net/huangfei711/article/details/53044539/

建议更换pip源

CentOS中安装mysql

源码/二进制安装:
	解压安装包:
		tar xf mysql-5.6.40.tar.gz
	进入该目录下:
		cd mysql-5.6.40.tar.gz
	生成编译文件:
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.40 \
-DMYSQL_DATADIR=/usr/local/mysql-5.6.40/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.40/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0
	编译安装:
		make && make install
	进入mysql程序目录:
		cd /usr/local/mysql-5.6.40/
	创建mysql系统用户:
		useradd mysql -s /sbin/nologin -M
	进入配置文件及脚本目录
		cd support-files/
	拷贝配置文件到etc,覆盖etc下的my.cnf
		cp my-default.cnf /etc/my.cnf
	拷贝启动脚本
		cp mysql.server /etc/init.d/mysqld
	进入初始化目录
		cd /usr/local/mysql-5.6.40/scripts/
	初始化数据库
		 ./mysql_install_db --user=mysql 
			--basedir=/usr/local/mysql-5.6.40 
				--datadir=/usr/local/mysql-5.6.40/data
	做软连接
		ln -s /usr/local/mysql-5.6.40 /usr/local/mysql
	启动mysql:
		/etc/init.d/mysqld start
	启动时若报错(ERROR! The server quit without updating PID file (/usr/local/mysql-5.6.40/data/db01.pid)),原因为找不到该目录
		执行:mkdir /usr/local/mysql-5.6.40/tmp
	为mysql添加环境变量
		vim /etc/profile
		export PATH="/usr/local/mysql/bin:$PATH"
		source /etc/profile
	为mysql授权
		chown -R mysql.mysql /usr/local/mysql*
	创建新用户
		mysqladmin -uroot -p password 123(默认无密码)
	链接mysql
		mysql -uroot -p123
		

MySQL相关

MySQL客户端命令相关
mysql 常用属性:
    1.   -u:指定用户
    2.	 -p:指定密码
    3.	 -S:指定socket文件
    4.	 -P:指定端口
    5.	 -h:指定主机域
    6.	 -e:指定SQL语句
mysqladmin常用属性:
	1.   -u:指定用户
    2.	 -p:指定密码
    3.	 -S:指定socket文件
    4.	 -P:指定端口
    5.	 -h:指定主机域
    6.   password:指定新密码
    7.   shutdown:停止mysql服务
    8.   create 库名:在库外创建数据库
    9.   drop 库名:在库外删除数据库
MySQL误删mysql.user所有数据恢复
方法一:越过授权重新插入root用户
1. 在/etc/my.cnf中配置'skip-grant-tables'

2. 重启mysql服务'/etc/init.d/mysqld restart'

3. 进入mysql在mysql.user中插入数据
insert into mysql.user(User,authentication_string,ssl_cipher x509_issuer x509_subject) values('root','','','','');

4. 为刚才插入的用户更新mysql.user中所有字段
update mysql.user set Host='127.0.0.1',select_priv='y', insert_priv='y',update_priv='y',Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root';

5. 为root用户设置一个新密码
update mysql.user set authentication_string = password("新密码") where user = "root" and host = "localhost";

6. 退出mysql,更改/etc/my.cnf删除'skip-grant-tables'并重启mysql服务

方法二:
越过授权并执行:flush privileges;
然后授权一个新超级用户:
grant all on *.* to root@'localhost' identified by '123' with grant option;
更改配置文件的越过授权,重启mysql服务即可
MySQL多实例的创建
提示:由于mysql有预分配内存机制,服务器内存需在2GB以上,否则容易内存崩溃

1.创建多个配置文件目录
	mkdir -p /data/330{7..9}
2.编辑多个配置文件
    vim /data/3307/my.cnf
    [mysqld]
    basedir=/usr/local/mysql
    datadir=/data/3307/data
    port=3307
    socket=/data/3307/mysql.sock
    server-id=7
    log_error=/data/3307/data/mysql.err
    pid=/data/3307/data/mysql.pid
    
    vim /data/3308/my.cnf
    [mysqld]
    basedir=/usr/local/mysql
    datadir=/data/3308/data
    port=3308
    socket=/data/3308/mysql.sock
    server-id=8
    log_error=/data/3308/data/mysql.err
    pid=/data/3308/data/mysql.pid
    
    vim /data/3309/my.cnf
    [mysqld]
    basedir=/usr/local/mysql
    datadir=/data/3309/data
    port=3309
    socket=/data/3309/mysql.sock
    server-id=9
    log_error=/data/3309/data/mysql.err
    pid=/data/3309/data/mysql.pid
    
3.进入mysql初始化目录并初始化多套目录
	cd /usr/local/mysql/scripts/
    ./mysql_install_db --defaults-file=/data/3307/my.cnf --		user=mysql --basedir=/usr/local/mysql --					datadir=/data/3307/data
    
    ./mysql_install_db --defaults-file=/data/3308/my.cnf --		user=mysql --basedir=/usr/local/mysql --					datadir=/data/3308/data
    
    ./mysql_install_db --defaults-file=/data/3309/my.cnf --		user=mysql --basedir=/usr/local/mysql --					datadir=/data/3309/data
    
4.授权
	chown -R mysql.mysql /data/330*
	
5.启动所有mysql
	mysqld_safe --defaults-file=/data/3307/my.cnf &
	mysqld_safe --defaults-file=/data/3308/my.cnf &
	mysqld_safe --defaults-file=/data/3309/my.cnf &
	
6.检查端口和进程是否存活
	netstat -lntup|grep 330*
	ps -ef|grep mysqld
	
7.为所有mysql实例设置密码
mysqladmin -uroot -p -S /data/3307/mysql.sock  password 3307
mysqladmin -uroot -p -S /data/3308/mysql.sock  password 3308
mysqladmin -uroot -p -S /data/3309/mysql.sock  password 3309

8.链接mysql实例
    mysql -uroot -p3307 -S /data/3307/mysql.sock
    mysql -uroot -p3308 -S /data/3308/mysql.sock
    mysql -uroot -p3309 -S /data/3309/mysql.sock
    
9.快捷连接mysql实例方法
    vim /usr/local/mysql/bin/mysql3307
    mysql -uroot -p3307 -S /data/3307/mysql.sock

    vim /usr/local/mysql/bin/mysql3308
    mysql -uroot -p3308 -S /data/3308/mysql.sock

    vim /usr/local/mysql/bin/mysql3309
    mysql -uroot -p3309 -S /data/3309/mysql.sock
    
10.授权快捷链接方式
	chmod +x /usr/local/mysql/bin/mysql330*
	
11.停止mysql多实例
mysqladmin -uroot -p3307 -S /data/3307/mysql.sock shutdown
mysqladmin -uroot -p3308 -S /data/3308/mysql.sock shutdown
mysqladmin -uroot -p3309 -S /data/3309/mysql.sock shutdown
MySQL主从复制流程
1.修改主库mysql配置文件并重启使其生效
	log_bin=mysql-bin
    binlog_format=row
    server_id=1
2.在主库创建主从复制用户
	grant replication slave on *.* to rep@'%' identified by 
3.在主库执行
	show master status;
	记录File与Position字段的值
4.在从库mysql执行
	change master to
	master_host='主库ip',
	master_user='在主库创建时的用户名',
	master_password='在主库创建时的密码',
	master_log_file='主库记录的File字段的值',
	master_log_pos='主库记录的Position字段的值';
5.在从库开启主从复制
	start slave;
6.在从库查看主从复制的状态
	show slave status\G
	看到如下两个参数的值为yes表示主从复制成功
	Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
	若两个参数的值都为NO表示主从复制未开启或命令错误
	若第一个参数的值为NO表示在同步主库的SQL时出错
		解决方案:
			先停止服务:stop slave;
			执行命令:
			set global sql_slave_skip_counter=N;
			该命令表示可忽略N次错误
			开启服务:start slave;
	若第二个参数的值为NO表示出现以下两种错误
		1.网络问题:
			测试ip:可使用ping 主库ip 查看网络是否联通
			测试端口:可使用telnet 主库ip 3306 检查端口是否存活
			用户名密码:检查用户名密码是否正确
		2.反向解析问题:
			报错信息为:Access denied for user 'root'@'db02' 							(using password: NO)
			可以看到root用户后是我们的主机名称
			原因就是Mysql的反向解析机制将我们的ip解析为了我们的主机名             可在配置文件中配置skip_name_resolve解决

MySQL使用Binlog恢复数据
MySQL中Binlog的工作模式:
	语句模式(默认)
	行级模式(MySQL5.7默认) 企业中多使用该模式,记录的是数据库中每一行     的变化过程,比语句模式更加严谨
	混合模式

恢复数据流程:
1.使用mysqlbinlog关键字查看binlog:
	mysqlbinlog mysql-bin.000001
2.在行级模式中是查看不到DML(数据操作语言)语言,需加入一些参数进行查看
mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.00003
3.根据上面执行语句找到要恢复数据的起始位置与结束位置后执行:
mysqlbinlog 
--start -position=起始位置
--stop -position结束位置
mysql-bin.000003 > /tmp/binlog.sql
4.然后进入mysql执行:
	source /tmp/binlog.sql
MySQL-MHA高可用(VIP漂移)
MHA工作原理:
	当Master(主库)出现故障时,它可以自动将最新数据的Slave(从库)提升为	新的Master,然后将所有其他的Slave重新指向新的Master
	
MHA工作流程:
	1.将宕机的master上的所有binlog事件保存下来
	2.对比从库上的relay-log找到数据最新的slave
	3.通过最新数据的slave上的中继日志将其他从库的数据补全
	4.通过从宕机的master上保存下来的binlog将数据最新的slave补全

功能依赖:
	每个mysql服务器都必须配置:
	yum install perl-DBD-MySQL -y
	rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
	
配置流程:
  #01 从库必须开启binlog(随时可能升级为主库)
  #02 从库开启的server_id不能与主库相同
  #03 所有库中都必须配置relay_log_purge=0(禁用自动删除relay-log)
  #04 从库也必须要创建主从复制用户(开启成功后在主库执行一遍即可)
  #05 在所有从库中执行(创建slave)
        change master to
        master_host='主库ip',
        master_user='在主库创建时的用户名',
        master_password='在主库创建时的密码',
        master_log_file='主库记录的File字段的值',
        master_log_pos='主库记录的Position字段的值';
  #06 在所有服务器中创建软连接
        ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/
        ln -s /usr/local/mysql/bin/mysql /usr/bin/
  #07 创建MHA工作目录
    	mkdir /etc/mha
  #08 自定义生成MHA配置文件
    	vim /etc/mha/app1.cnf
   		[server default]
   		# 设置manager的工作目录
        manager_log=/etc/mha/manager.log
        # 设置manager的日志目录
        manager_workdir=/etc/mha/app1
        # 设置master,保存binlog的位置,以便MHA可以找到master的日             志,我这里的也就是mysql的数据目录
        master_binlog_dir=/usr/local/mysql/data
        # 设置自动failover时候的切换脚本
        master_ip_failover_script=
        /usr/local/bin/master_ip_failover(需下载)
        # 监控用户
        user=mha
        # 监控用户密码
        password=mha
        #设置监控主库,发送ping包的时间间隔,尝试三次没有回应的时候自          动进行failover
        ping_interval=2
        # 复制用户
        repl_user=rep
        # 复制用户的密码
        repl_password=123
		# 设置ssh登陆的用户名
        ssh_user=root

        [server1]
        hostname=10.0.0.51
        port=3306

        [server2]
        hostname=10.0.0.52
        port=3306

        [server3]
        hostname=10.0.0.53
        port=3306
    
  #09 在mysql中创建一个mha管理用户,只需要在主库创建
  		grant all on *.* to mha@'%' identified by 'mha';
  #10 创建密钥对,完成免密登陆,在所有服务器上执行并测试
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1
ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.53
ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.52
ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.51
  #11 在主库绑定vip
  		/sbin/ifconfig eth0:0 10.0.0.55/24
  #12 给配置文件中的master_ip_failover_script指定的脚本转换格式
  		dos2unix master_ip_failover
  #13 给配置文件中的master_ip_failover_script指定的脚本执行权限
  		chmod +x master_ip_failover
  #14 使用mha工具检测ssh链接
		masterha_check_ssh --conf=/etc/mha/app1.cnf
  #15 使用mha工具检测主从复制
		masterha_check_repl --conf=/etc/mha/app1.cnf
  #16 启动mha
        nohup masterha_manager --conf=/etc/mha/app1.cnf 
        --remove_dead_master_conf --ignore_last_failover <           /dev/null > /etc/mha/manager.log 2>&1 &
  #17 检查mha启动状态
    	masterha_check_status --conf=/etc/mha/app1.cnf
  #18 停止mha
  		masterha_stop --conf=/etc/mha/app1.cnf
	
MHA工具介绍:
    Manager工具包主要包括以下几个工具:
    cd /root/mha4mysql-manager-0.56/bin
    ll
    masterha_check_ssh              #检查MHA的ssh-key
    masterha_check_repl             #检查主从复制情况
    masterha_manger                 #启动MHA
    masterha_check_status           #检测MHA的运行状态
    masterha_master_monitor         #检测master是否宕机
    masterha_master_switch          #手动故障转移
    masterha_conf_host              #手动添加server信息
    masterha_secondary_check        #建立TCP连接从远程服务器
    masterha_stop                   #停止MHA

Node工具包主要包括以下几个工具:
    cd /root/mha4mysql-node-0.56/bin
    ll
    save_binary_logs                #保存宕机的master的binlog
    apply_diff_relay_logs           #识别relay log的差异
    filter_mysqlbinlog              #防止回滚事件
    purge_relay_logs                #清除中继日志
MySQL备份命令
完全备份/data/
mysqldump -u* -p* -S socket文件 -A > /tmp/full.sql

项目上线流程

基础传输项目流程

服务器关闭防火墙
	systemctl stop firewalld

上传django文件时要注意在服务器配置数据库环境
	在settings配置文件中设置ALLOWED_HOSTS = ['*']

使用scp上传文件时(尽量使用相对路径)
	scp filename username@hostname path

或使用X shell直接拖拽文件上传,需安装:
	yum install -y lrzsz
	
解压文件到服务器指定目录
	解压方式详见打包压缩命令
	
运行django项目需切换到项目根目录下执行:
	python3 manager.py runserver host:port

防火墙与selinux禁用

 systemctl stop firewalld 停止防火墙
 systemctl disable firewalld 禁用防火墙(临时有效)
 
 getenforce 查看selinux状态
 setenforce 0 关闭selinux(临时有效)
 sed -i 's#SELINUX=enforcing#SELINUX=disabled#g'
 /etc/sysconfig/selinux (永久有效)

 

posted @ 2019-05-14 15:09  呔!妖精。。。  阅读(229)  评论(0编辑  收藏  举报