1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/snail-linux_php_installer

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
mysql_master_slave_sync.php 3.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
snail Отправлено 27.10.2013 18:43 7fed9ad
<?php
/**
* 主mysql信息
* 数据库用户应该具有主mysql root帐号的权限
*/
$master_host = '192.168.199.130';
$master_user = 'root';
$master_pass = 'admin';
/**
* 用于复制主mysql数据到从mysql的用户
* 该用户应该是主服务器上的用户,并且对同步的数据库拥有所有的权限
*/
$copy_user_on_master = 'root';
$copy_pass_on_master = 'admin';
/**
* 从mysql信息
* 数据库用户应该具有主mysql root帐号的权限
*/
$slave_host = '192.168.199.25';
$slave_user = 'root';
$slave_pass = 'admin';
#=================配置结束==================
$conn_master = mysql_connect($master_host, $master_user, $master_pass) or die("Fail connect to master\n");
$conn_slave = mysql_connect($slave_host, $slave_user, $slave_pass) or die("Fail connect to slave\n");
switch (@$argv[1]) {
case 'slave_status':
checkSlaveStatus($conn_slave);
break;
case 'master_status':
checkMasterStatus($conn_master);
break;
case 'sync':
lockMaster($conn_master);
$master_status = getMasterStatus($conn_master);
if (!$master_status) {
unLockMaster($conn_master);
exit("Get master status failed.\n");
}
$change_master_sql = "change master to master_host='{$master_host}',master_user='{$copy_user_on_master}',master_password='{$copy_pass_on_master}',master_log_file='{$master_status['File']}' ,master_log_pos={$master_status['Position']}";
if (!mysql_query('slave stop', $conn_slave)) {
unLockMaster($conn_master);
exit('stop slave failed.[' . mysql_error($conn_slave) . "]\n");
}
if (!mysql_query($change_master_sql, $conn_slave)) {
unLockMaster($conn_master);
exit('chage master failed..[' . mysql_error($conn_slave) . "]\n");
}
if (!mysql_query('slave start', $conn_slave)) {
unLockMaster($conn_master);
exit('start slave failed.[' . mysql_error($conn_slave) . "]\n");
}
$slave_status = getSlaveStatus($conn_slave);
if (!$slave_status) {
unLockMaster($conn_master);
exit('start slave failed.[' . mysql_error($conn_slave) . "]\n");
}
echo "Slave_IO_Running:{$slave_status['Slave_IO_Running']}\nSlave_SQL_Running:{$slave_status['Slave_SQL_Running']}\n";
unLockMaster($conn_master);
break;
default:
printUsage();
break;
}
mysql_close($conn_master);
mysql_close($conn_slave);
function printUsage() {
global $argv;
echo "Usage: php $argv[0] <slave_status|master_status|sync>\n";
}
function checkSlaveStatus($link) {
if (($slave_status = getSlaveStatus($link))) {
foreach ($slave_status as $key => $value) {
echo "{$key}:{$value}\n";
}
} else {
exit("Get slave status failed.\n");
}
}
function checkMasterStatus($link) {
$master_status = getMasterStatus($link);
if ($master_status) {
foreach ($master_status as $key => $value) {
echo "{$key}:{$value}\n";
}
} else {
exit("Get master status failed.\n");
}
}
function getMasterStatus($link) {
$query = 'show master status';
$rs = mysql_fetch_assoc(mysql_query($query, $link));
return $rs;
}
function getSlaveStatus($link) {
$query = 'show slave status';
$rs = mysql_fetch_assoc(mysql_query($query, $link));
return $rs;
}
function lockMaster($link) {
mysql_query('FLUSH TABLES WITH READ LOCK', $link);
}
function unLockMaster($link) {
mysql_query('unlock tables', $link);
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/snail-linux_php_installer.git
git@api.gitlife.ru:oschina-mirror/snail-linux_php_installer.git
oschina-mirror
snail-linux_php_installer
snail-linux_php_installer
master