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 (永久有效)