我即将将生产数据库迁移到另一台服务器.它大约38GB,它正在使用MYISAM表.由于我没有物理访问新服务器文件系统,我们只能使用mysqldump.
我查看了这个网站,看看mysqldump在线备份是否会打倒我们的生产网站.从这篇文章:运行没有锁定表的MySQLDump,它说明显mysqldump将锁定数据库并防止插入.但经过几次测试后,我很想知道其他情况.
如果我使用
mysqldump -u root -ppassword --flush-logs testDB > /tmp/backup.sql
Run Code Online (Sandbox Code Playgroud)
mysqldump最终会默认执行' --lock-tables ',这是一个READ LOCAL锁(参考mysql 5.1 doc),其中并发插入仍然可用.我已经做了一个for循环,每秒插入一个表,而mysqldump需要一分钟才能完成.每一秒都会在此期间插入记录.这意味着,mysqldump不会中断生产服务器,INSERT仍然可以继续.
有没有人有不同的经历?我想在继续我的生产服务器之前确保这一点,所以很高兴知道我做错了什么让我的测试不正确.
[我的mysql-server版本是5.1.52,而mysqldump是10.13]
我正在尝试使用 AWS python 库 boto3 创建会话。我发现我们也可以这样做
session = boto3.Session(profile_name='profile1')
Run Code Online (Sandbox Code Playgroud)
或者
session2 = boto3.session.Session(profile_name='profile2')
Run Code Online (Sandbox Code Playgroud)
我检查了他们的文档,它应该使用boto3.session.Session()。
为什么两种方法都有效?它们背后的理念有何不同?
这是volumes.json:
{
"Volumes": [
{
"AvailabilityZone": "us-east-1a",
"Tags": [
{
"Value": "vol-rescue-system",
"Key": "Name"
}
],
"VolumeId": "vol-00112233",
},
{
"AvailabilityZone": "us-east-1a",
"Tags": [
{
"Value": "vol-rescue-swap",
"Key": "Name"
}
],
"VolumeId": "vol-00112234",
},
{
"AvailabilityZone": "us-east-1a",
"Tags": [
{
"Value": "vol-rescue-storage",
"Key": "Name"
}
],
"VolumeId": "vol-00112235",
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要获取和的值,VolumeId并将Tags.Value其用作调用另一个命令的输入.从json数组中获取单个值很容易,但我无法从中提取多个值并将其传递给另一个bash命令.
我可以使用这个得到一个值:
cat volumes.json |jq -r '.Volumes[].VolumeId' |while read v; do another_bash_command $v; done
Run Code Online (Sandbox Code Playgroud)
但我无法获得多重值因为这是错误的:
cat volumes.json |jq -r '.Volumes[].VolumeId, .Volumes[].Tags[].Value' |while read …Run Code Online (Sandbox Code Playgroud)