- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MySQL的一些功能实用的Linux shell脚本分享由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Memcached启动脚本 。
1
|
# vim /etc/init.d/memcached
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
#!/bin/bash
#=======================================================================================
# chkconfig: - 80 12
# description: Distributed memory caching daemon
# processname: memcached
#=======================================================================================
IPADDR=`
/sbin/ifconfig
eth1 |
awk
-F
':'
'/inet addr/{print $2}'
|
sed
's/[a-zA-Z ]//g'
`
PORT=
"11211"
USER=
"root"
SIZE=
"2048"
CONNNUM=
"51200"
PIDFILE=
"/var/run/memcached.pid"
BINFILE=
"/usr/local/memcached/bin/memcached"
LOCKFILE=
"/var/lock/subsys/memcached"
RETVAL=0
start() {
echo
-n $
"Starting memcached......"
$BINFILE -d -l $IPADDR -p $PORT -u $USER -m $SIZE -c $CONNNUM -P $PIDFILE
RETVAL=$?
echo
[ $RETVAL -
eq
0 ] &&
touch
$LOCKFILE
return
$RETVAL
}
stop() {
echo
-n $
"Shutting down memcached......"
/sbin/killproc
$BINFILE
RETVAL=$?
echo
[ $RETVAL -
eq
0 ] &&
rm
-f $LOCKFILE
return
$RETVAL
}
restart() {
stop
sleep
1
start
}
reload() {
echo
-n $
"Reloading memcached......"
/sbin/killproc
$BINFILE -HUP
RETVAL=$?
echo
return
$RETVAL
}
case
"$1"
in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
condrestart)
[ -e $LOCKFILE ] && restart
RETVAL=$?
;;
reload)
reload
;;
status)
status $prog
RETVAL=$?
;;
*)
echo
"Usage: $0 {start|stop|restart|condrestart|status}"
RETVAL=1
esac
|
。
1
2
3
4
5
|
exit
$RETVAL
# chmod +x /etc/init.d/memcached
# chkconfig --add memcached
# chkconfig --level 235 memcached on
# service memcached start
|
binlog 自动清理脚本 。
1
|
# vim /data/scripts/delete_mysql_binlog.sh
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
#!/bin/bash
#=======================================================================================
# 用于删除 MySQL Master 端已经同步完的 binlog【需在 Master 端运行】,以减少磁盘空间
# 每天凌晨 5:30 分运行一次
#
# 注:需在 Slave 端添加允许 Master 端访问的帐号【帐号:check_binlog,密码:binlog_2356】
# 运行于 MySQL Master 端【目前只用于一主一从的同步模式,对于多从的情况暂时未考虑】
#=======================================================================================
PATH=
/sbin
:
/bin
:
/usr/sbin
:
/usr/bin
:
/usr/local/sbin
:
/usr/local/bin
## Slave端连接信息
SLAVE_ADDR=
"XXX.XXX.XXX.XXX"
SLAVE_USER=
"check_binlog"
SLAVE_PWD=
"binlog_2356"
LOGFILE=
"/data/logs/db_sync_info.log"
PINGFILE=
"/tmp/mysqlping.log"
## MySQL状态信息查看命令
SQLCMD=
"show slave status"
#=======================================================================================
## 检查MySQL是否已经运行
if
[[ `
ps
aux |
grep
mysql[d] |
wc
-l` -
eq
0 ]];
then
echo
The MySQL is not running at: `
date
+%F
" "
%H-%M-%S` >> ${LOGFILE}
exit
1
fi
## 测试Slave端的连通性
nohup
mysqladmin -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD}
ping
> ${PINGFILE}
retval=`
grep
"^error"
${PINGFILE}`
rm
-f ${PINGFILE}
if
[[
"${retval}X"
!=
"X"
]];
then
echo
The MySQL Slave can not be connected at: `
date
+%F
" "
%H-%M-%S` >> ${LOGFILE}
exit
1
fi
## 检查是否合法的Slave
MASTER_ADDR=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e
"${SQLCMD}\G;"
|
awk
'$1=="Master_Host:" {print $2}'
`
LOCAL_ADDR=`
/sbin/ifconfig
eth1 |
awk
-F
':'
'/inet addr/{print $2}'
|
sed
's/[a-zA-Z ]//g'
`
if
[[
"${MASTER_ADDR}"
!=
"${LOCAL_ADDR}"
]];
then
echo
The MySQL Slave is not lawful at: `
date
+%F
" "
%H-%M-%S` >> ${LOGFILE}
exit
1
fi
## 获得Slave端信息,以此来确定是否处于正常同步的情况
IO_STATUS=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e
"${SQLCMD}\G;"
|
awk
'$1=="Slave_IO_Running:" {print $2}'
`
SQL_STATUS=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e
"${SQLCMD}\G;"
|
awk
'$1=="Slave_SQL_Running:" {print $2}'
`
if
[[
"${IO_STATUS}"
!=
"Yes"
||
"${SQL_STATUS}"
!=
"Yes"
]];
then
echo
The MySQL Replication is not synchronous at: `
date
+%F
" "
%H-%M-%S` >> ${LOGFILE}
exit
1
fi
## 再做一次判断,以保证数据同步绝对正常【创建测试数据】
mysql -uroot -e
"create database if not exists mytestdb;"
sleep
3
retval=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e
"show databases;"
|
grep
mytestdb`
mysql -uroot -e
"drop database if exists mytestdb;"
if
[[
"${retval}X"
=
"X"
]];
then
echo
The MySQL Replication is not synchronous at: `
date
+%F
" "
%H-%M-%S` >> ${LOGFILE}
exit
1
fi
## 在已经同步的情况,还需要判断当前同步的binlog,以此来确定哪些已经是过期的binlog
SLAVE_BINLOG1=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e
"${SQLCMD}\G;"
|
awk
'$1=="Master_Log_File:" {print $2}'
`
SLAVE_BINLOG2=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e
"${SQLCMD}\G;"
|
awk
'$1=="Relay_Master_Log_File:" {print $2}'
`
## 获得Master端,当前的binlog文件以及binlog路径
MASTER_BINLOG=`mysql -uroot -e
"show master status;"
|
grep
-
v
'^+'
|
tail
-1 |
awk
'{print $1}'
`
## 主从端已经同步到相同的binlog
if
[[
"${SLAVE_BINLOG1}"
=
"${SLAVE_BINLOG2}"
&&
"${SLAVE_BINLOG1}"
=
"${MASTER_BINLOG}"
]];
then
CURR_BINLOG=
"${MASTER_BINLOG}"
## 主从端已经同步,但从端的binlog还没有追赶到主端最新的binlog
elif
[[
"${SLAVE_BINLOG1}"
=
"${SLAVE_BINLOG2}"
&&
"${SLAVE_BINLOG1}"
!=
"${MASTER_BINLOG}"
]];
then
CURR_BINLOG=
"${SLAVE_BINLOG1}"
## 主从端已经同步,主从端的binlog一致,但relaylog还不一致
elif
[[
"${SLAVE_BINLOG1}"
!=
"${SLAVE_BINLOG2}"
&&
"${SLAVE_BINLOG1}"
=
"${MASTER_BINLOG}"
]];
then
CURR_BINLOG=
"${SLAVE_BINLOG2}"
else
echo
Has noknown error at:`
date
+%F
" "
%H-%M-%S` >> ${LOGFILE}
exit
1
fi
mysql -uroot -e
"purge binary logs to '${CURR_BINLOG}';"
if
[[ $? -
eq
0 ]];
then
echo
Clear MySQL binlog is ok at: `
date
+%F
" "
%H-%M-%S` >> ${LOGFILE}
fi
|
1
2
|
# crontab -e
30 05 * * *
/data/scripts/delete_mysql_binlog
.sh >
/dev/null
2>&1
|
修复MySQL主从同步 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#!/bin/sh
PATH=
/sbin
:
/bin
:
/usr/sbin
:
/usr/bin
:
/usr/local/sbin
:
/usr/local/bin
LOGFILE=
/data/repair_mysql_sync_
`
date
+%F`.log
SQLCMD1=
"show slave status"
## 查看MySQL是否已启动
if
[[ `
ps
aux |
grep
mysqld |
grep
-
v
grep
`
"X"
=
"X"
]];
then
echo
The MySQL is not running at: `
date
+%F
" "
%H-%M-%S` >> ${LOGFILE}
exit
1
fi
## 获得MySQL从端Relay binlog的路径
retval=`
grep
"^relay-log"
/etc/my
.cnf |
grep
-
v
relay-log- |
grep
'/'
`
if
[[
"${retval}"
=
"X"
]];
then
RELAY_BINLOG_PATH=`
ps
aux |
grep
-w mysqld |
grep
-
v
grep
|
awk
'{print $13}'
|
awk
-F
'='
'{print $2}'
`
else
RELAY_BINLOG_PATH=`
dirname
$(
echo
${retval} |
awk
-F
'='
'{print $2}'
)`
fi
## 查找master.info文件,用于定位Binlog信息
MASTER_FILE=`
ps
aux |
grep
-w mysqld |
grep
-
v
grep
|
awk
'{print $13}'
|
awk
-F
'='
'{print $2}'
`
/master
.info
if
[[ ! -e ${MASTER_FILE} ]];
then
echo
This Server is not MySQL Slave at: `
date
+%F
" "
%H-%M-%S` >> ${LOGFILE}
exit
1
fi
## 获得当前的同步状态
IO_STATUS=`mysql -uroot -e
"${SQLCMD1}\G;"
|
awk
'$1=="Slave_IO_Running:" {print $2}'
`
SQL_STATUS=`mysql -uroot -e
"${SQLCMD1}\G;"
|
awk
'$1=="Slave_SQL_Running:" {print $2}'
`
if
[[
"${IO_STATUS}"
=
"Yes"
&&
"${SQL_STATUS}"
=
"Yes"
]];
then
echo
Now, The MySQL Replication is synchronous at: `
date
+%F
" "
%H-%M-%S` >> ${LOGFILE}
exit
0
fi
## 从master.info文件中,获得MySQL主端的同步信息
REPLI_INFO=`
sed
'/^$/d'
${MASTER_FILE} |
tail
+2 |
head
-5`
REPLI_BINLOG_FILE=`
echo
${REPLI_INFO} |
awk
'{print $1}'
`
REPLI_IPADDR=`
echo
${REPLI_INFO} |
awk
'{print $3}'
`
REPLI_USER=`
echo
${REPLI_INFO} |
awk
'{print $4}'
`
REPLI_PWD=`
echo
${REPLI_INFO} |
awk
'{print $5}'
`
## 删除无用的Relay binlog
rm
-rf ${RELAY_BINLOG_PATH}/*-relay-bin.*
## 直接从0位置开始同步
SQLCMD2=
"change master to master_host='${REPLI_IPADDR}', master_user='${REPLI_USER}', master_password='${REPLI_PWD}',"
SQLCMD2=
"${SQLCMD2} master_log_file='${REPLI_BINLOG_FILE}', master_log_pos=0"
mysql -uroot -e
"stop slave;"
mysql -uroot -e
"${SQLCMD2};"
mysql -uroot -e
"start slave;"
## 如果同步的过程中,出现重复记录导致同步失败,就跳过
while
true
do
sleep
2
IO_STATUS=`mysql -uroot -e
"${SQLCMD1}\G;"
|
awk
'$1=="Slave_IO_Running:" {print $2}'
`
SQL_STATUS=`mysql -uroot -e
"${SQLCMD1}\G;"
|
awk
'$1=="Slave_SQL_Running:" {print $2}'
`
BEHIND_STATUS=`mysql -uroot -e
"${SQLCMD1}\G;"
|
awk
'$1=="Seconds_Behind_Master:" {print $2}'
`
SLAVE_BINLOG1=`mysql -uroot -e
"${SQLCMD1}\G;"
|
awk
'$1=="Master_Log_File:" {print $2}'
`
SLAVE_BINLOG2=`mysql -uroot -e
"${SQLCMD1}\G;"
|
awk
'$1=="Relay_Master_Log_File:" {print $2}'
`
## 出现错误,就将错误信息记录到日志文件,并跳过错误继续同步
if
[[
"${IO_STATUS}"
!=
"Yes"
||
"${SQL_STATUS}"
!=
"Yes"
]];
then
ERRORINFO=`mysql -uroot -e
"${SQLCMD1}\G;"
|
awk
-F
': '
'$1=="Last_Error" {print $2}'
`
echo
"The MySQL synchronous error information: ${ERRORINFO}"
>> ${LOGFILE}
mysql -uroot -e
"stop slave;"
mysql -uroot -e
"set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;"
mysql -uroot -e
"start slave;"
## 已完成同步,就正常退出
elif
[[
"${IO_STATUS}"
=
"Yes"
&&
"${SQL_STATUS}"
=
"Yes"
&&
"${SLAVE_BINLOG1}"
=
"${SLAVE_BINLOG2}"
&& ${BEHIND_STATUS} -
eq
0 ]];
then
echo
The MySQL synchronous is ok at: `
date
+%F
" "
%H-%M-%S` >> ${LOGFILE}
break
fi
done
|
。
最后此篇关于MySQL的一些功能实用的Linux shell脚本分享的文章就讲到这里了,如果你想了解更多关于MySQL的一些功能实用的Linux shell脚本分享的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
目前我正在构建相当大的网络系统,我需要强大的 SQL 数据库解决方案。我选择 Mysql 而不是 Postgres,因为一些任务需要只读(MyISAM 引擎)而其他任务需要大量写入(InnoDB)。
我在 mysql 中使用如下命令。当它显示表格数据时,它被格式化为一个非常干净的表格,间距均匀且 |作为列分隔符。 SELECT * FROM TABLE_NAME; 当我从 CLI 运行命令时,如下
我知道这个问题之前已经被问过好几次了,我已经解决了很多问题,但到目前为止没有任何效果。 MySQL 试图将自身安装到的目录 (usr/local/mysql) 肯定有问题。关于我的错误的奇怪之处在于我
以下是我的 SQL 数据结构,我正在尝试如下两个查询: Select Wrk_ID, Wrk_LastName, Skill_Desc from Worker, Skill where
我们有一个本地 mysql 服务器(不在公共(public)域上),并希望将该服务器复制到我们拥有的 google 云 sql 实例。我的问题是:1.这可能吗?2.我们的本地服务器只能在本地网络上访问
我有一个表(test_table),其中一些字段值(例如字段 A、B 和 C)是从外部应用程序插入的,还有一个字段(字段 D),我想从现有表(store_table)插入其值,但在插入前者(A、B 和
我想创建一个 AWS RDS 实例,然后使用 terraform 管理数据库用户。因此,首先,我创建了一个 RDS 实例,然后使用创建的 RDS 实例初始化 mysql 提供程序,以进一步将其用于用户
当用户在我的网站上注册时,他们会在我的一个数据库中创建自己的表格。该表存储用户发布的所有帖子。我还想做的是也为他们生成自己的 MySql 用户——该用户仅有权从他们的表中读取、写入和删除。 创建它应该
我有一个关于 ColdFusion 和 Mysql 的问题。我有两个表:PRODUCT 和 PRODUCT_CAT。我想列出包含一些标记为:IS_EXTRANET=1 的特殊产品的类别。所以我写了这个
我想获取 recipes_id 列的值,以获取包含 ingredient_id 的 2,17 和 26 条目的值。 假设 ingredient_id 2 丢失则不获取记录。 我已经尝试过 IN 运算符
在 Ubuntu 中,我通常安装两者,但 MySQL 的客户端和服务器之间有什么区别。 作为奖励,当一个新语句提到它需要 MySQL 5.x 时,它是指客户端、服务器还是两者兼而有之。例如这个链接ht
我重新访问了我的数据库并注意到我有一些 INT 类型的主键。 这还不够独特,所以我想我会有一个指导。 我来自微软 sql 背景,在 ssms 中你可以 选择类型为“uniqeidentifier”并自
我的系统上有 MySQL,我正在尝试确定它是 Oracle MySQL 还是 MySQL。 Oracle MySQL 有区别吗: http://www.oracle.com/us/products/m
我是在生产 MySQL 中运行的应用程序的新维护者。之前的维护者已经离开,留下的文档很少,而且联系不上了。 我面临的问题是执行以下请求大约需要 10 秒: SELECT COUNT(*) FROM `
我有两个位于不同机器上的 MySQL 数据库。我想自动将数据从一台服务器传输到另一台服务器。比方说,我希望每天早上 4:00 进行数据传输。 可以吗?是否有任何 MySQL 内置功能可以让我们做到这一
有什么方法可以使用 jdbc 查询位于 mysql 根目录之外的目录中的 mysql 表,还是必须将它们移动到 mysql 根目录内的数据库文件夹中?我在 Google 上搜索时没有找到任何东西。 最
我在 mysql 数据库中有两个表。成员和 ClassNumbers。两个表都有一个付费年份字段,都有一个代码字段。我想用代码数字表中的值更新成员表中的付费年份,其中成员中的代码与 ClassNumb
情况:我有 2 台服务器,其中一台当前托管一个实时 WordPress 站点,我希望能够将该站点转移到另一台服务器,以防第一台服务器出现故障。传输源文件很容易;传输数据库是我需要弄清楚如何做的。两台服
Phpmyadmin 有一个功能是“复制数据库到”..有没有mysql查询来写这个函数?类似于将 db A 复制到新的 db B。 最佳答案 首先创建复制数据库: CREATE DATABASE du
我有一个使用 mySQL 作为后端的库存软件。我已经在我的计算机上对其进行了测试,并且运行良好。 当我在计算机上安装我的软件时,我必须执行以下步骤: 安装 mySQL 服务器 将用户名指定为“root
我是一名优秀的程序员,十分优秀!