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