Импортировать дамп SQL в установку Typo3 без разрешения CREATE - PullRequest
0 голосов
/ 17 июня 2019

У меня есть клиент с веб-сайтом Typo3, который размещен на веб-сервере с очень строгими политиками в отношении пользователей базы данных.

Я хочу создать сайт разработки для этого сайта, и для этого мне нужно продублировать базу данных исходного сайта. Проблема в том, что пользователь базы данных, который я могу использовать через phpMyAdmin, не имеет возможности CREATE.

Так что простой экспорт sqldump и импорт его в БД сайта разработки не работает, он выдает ошибку "# 1044 access denied". Также, когда я просто пытаюсь использовать встроенный инструмент phpMyAdmin «копирование базы данных», я получаю ту же ошибку.

Внешний доступ через ODBC запрещен. Поддержка веб-хостинга еще не очень помогла с моей проблемой.

Мой вопрос: Можете ли вы придумать, каким образом я могу импортировать sqldump либо в пустую базу данных, либо в выход из базы данных Typo3 без использования phpMyAdmin или без внешнего доступа через ODBC? Может быть, это возможно с помощью PHP-скрипта? Пользователь БД, который использует Typo3, должен иметь возможность вносить изменения в БД, но он имеет только локальный доступ, поэтому я не могу его использовать, и он также отличается от того, который я могу использовать в phpMyAdmin.

1 Ответ

0 голосов
/ 26 июня 2019

Я нашел решение своей проблемы:

Пользователь БД, используемый самой Typo3, конечно же, имеет право изменять БД, поскольку в противном случае Typo3 не будет работать должным образом. Однако этот пользователь ограничен только локальным использованием, поэтому его можно использовать только с сервера.

Решением моей проблемы было использование этого пользователя БД Typo3 в сценарии PHP, который я загрузил на сервер. Скрипт импортирует дамп sql, который я помещаю в ту же папку, что и скрипт через FTP.

Я сам не написал сценарий, но нашел его здесь . Я только немного изменил это. Также у меня была проблема, что мой sqldump был очень большим, так что этот скрипт сломал ограничение памяти PHP. Я решил это, просто разделив дамп на несколько частей с помощью инструмента SQLDumpSplitter и импортировав их один за другим.

Немного хак, но это сработало!

// Name of the file
$filename = 'sqldump.sql';
// MySQL host
$mysql_host = 'thehost';
// MySQL username
$mysql_username = 'dbusername';
// MySQL password
$mysql_password = 'dbpassword';
// Database name
$mysql_database = 'dbdatabase';

// Connect to MySQL server
$con = @new mysqli($mysql_host, $mysql_username, $mysql_password, $mysql_database);

// Check connection
if ($con->connect_errno) {
    echo "Failed to connect to MySQL: " . $con->connect_errno;
    echo "<br/>Error: " . $con->connect_error;
}

// Temporary variable, used to store current query
$templine = '';
// Read in entire file
$lines = file($filename);
// Loop through each line
foreach ($lines as $line) {
// Skip it if it's a comment
    if (substr($line, 0, 2) == '--' || $line == '')
        continue;

// Add this line to the current segment
    $templine .= $line;
// If it has a semicolon at the end, it's the end of the query
    if (substr(trim($line), -1, 1) == ';') {
        // Perform the query
        $con->query($templine) or print('Error performing query \'<strong>' . $templine . '\': ' . ' ' . '<br /><br />');
        // Reset temp variable to empty
        $templine = '';
    }
}
echo "Tables imported successfully";
$con->close($con);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...