Форум об интернет-маркетинге
Вернуться   Форум об интернет-маркетинге > Технические вопросы > Веб-строительство

Ответ
 
Опции темы
Старый 20.12.2020, 17:17   #21
sanek1991
Senior Member
Профессор
 
Регистрация: 21.06.2020
Сообщений: 859
Сказал(а) спасибо: 80
Получил(а) "Спасибо": 187
Нарушения: 0/0 (0)
Репутация: 74780

Thread Starter Re: MySQL replace

Цитата:
Сообщение от Coder Посмотреть сообщение
Взять всю базу, переработать и переписать... Причём даже через простой текстовый редактор., с соответствующим функционалом поиска и замены. И записать базу взад.
Не всё так просто.
База в несжатом виде более 4 GB.
Текстовому редактору тоже явно поплохеет.
sanek1991 вне форума   Ответить с цитированием
Старый 20.12.2020, 17:20   #22
sanek1991
Senior Member
Профессор
 
Регистрация: 21.06.2020
Сообщений: 859
Сказал(а) спасибо: 80
Получил(а) "Спасибо": 187
Нарушения: 0/0 (0)
Репутация: 74780

Thread Starter Re: MySQL replace

Цитата:
Сообщение от Sitealert Посмотреть сообщение
А почему content_id, а не id? По автоинкременту что идёт?
Ну так назвали поле. Могли назвать просто id.
На нем автоинкремент.
sanek1991 вне форума   Ответить с цитированием
Старый 20.12.2020, 17:39   #23
Coder
Senior Member
Доцент
 
Регистрация: 25.07.2020
Сообщений: 437
Сказал(а) спасибо: 486
Получил(а) "Спасибо": 712
Нарушения: 0/0 (0)
Репутация: 7417
Отправить сообщение для Coder с помощью ICQ

По умолчанию Re: MySQL replace

Цитата:
Сообщение от sanek1991 Посмотреть сообщение
Не всё так просто.
База в несжатом виде более 4 GB.
Текстовому редактору тоже явно поплохеет.
Ну и разбить ее на подходящие кусочки - а потом собрать.
Было когда-то где-то сходное, даже покруче - там перенос базы большущей в другую несколько структуру, с сохранением всего и вся - ну, ничего, - если получается с кусочком все, то потом только вопрос времени и терпения - ну, в общем, тут надо бы по кусочкам и с полным контролем.
А особенно ежели разные форматы - тут только хардкор.
Ну, это я к тому, что лучше подольше и с контролем, чем просто через напрямую - а ну как где что немного не так и сразу не увидеть?

Ну, в общем, просто мысли в слух

Да! Чуть не забыл - все только на локале - на живом вообще даже и не думал бы. А потом залить уж точно получившееся и проверенное.

Последний раз редактировалось Coder; 20.12.2020 в 17:50.
Coder вне форума   Ответить с цитированием
Старый 21.12.2020, 04:26   #24
sanek1991
Senior Member
Профессор
 
Регистрация: 21.06.2020
Сообщений: 859
Сказал(а) спасибо: 80
Получил(а) "Спасибо": 187
Нарушения: 0/0 (0)
Репутация: 74780

Thread Starter Re: MySQL replace

Цитата:
Сообщение от Coder Посмотреть сообщение
если получается с кусочком все, то потом только вопрос времени и терпения - ну, в общем, тут надо бы по кусочкам и с полным контролем.
Кусочков только много получится.
Все таки склоняюсь к запуску php-скрипта, который по тихой обработает все записи в таблице.
Попробую конечно сам написать, но c php и mysql у меня туго, изучал только ассемблер на экзотические устройства.
sanek1991 вне форума   Ответить с цитированием
Старый 22.12.2020, 01:10   #25
ziliboba0213
Позитив =)
Академик
 
Аватар для ziliboba0213
 
Регистрация: 21.06.2020
Адрес: Санкт-Петербург
Сообщений: 4,367
Сказал(а) спасибо: 24,630
Получил(а) "Спасибо": 13,440
Нарушения: 0/0 (0)
Репутация: 1085558

По умолчанию Re: MySQL replace

Цитата:
Сообщение от sanek1991 Посмотреть сообщение
Кусочков только много получится.
Все таки склоняюсь к запуску php-скрипта, который по тихой обработает все записи в таблице.
Попробую конечно сам написать, но c php и mysql у меня туго, изучал только ассемблер на экзотические устройства.
Может попробовать типа денвера поставить, локально... И лимиты для php. Я так фотки генерил
ziliboba0213 вне форума   Ответить с цитированием
Старый 22.12.2020, 06:11   #26
sanek1991
Senior Member
Профессор
 
Регистрация: 21.06.2020
Сообщений: 859
Сказал(а) спасибо: 80
Получил(а) "Спасибо": 187
Нарушения: 0/0 (0)
Репутация: 74780

Thread Starter Re: MySQL replace

Цитата:
Сообщение от ziliboba0213 Посмотреть сообщение
Может попробовать типа денвера поставить, локально... И лимиты для php. Я так фотки генерил
Ну, "типа денвера" на локальном компе есть.
Кроме того, лимиты php тут при чем?
Php только отправляет запросы в MySQL.

Да php скрипт уже почти написал. Есть небольшой опыт на ASM-e.
Не большой получается.
php только начал осваивать, поэтому медленно, местами получается говно-код, но причесываю и прилизываю

Вот основное тело:
PHP код:
// функции запросов в БД
function query($sql$errormsg)
        {

            if(!
$result $db->sql_query($sql))
                {
                    
// если есть ошибка
                    
print "<br><font color=\"red\">\n";
                    print 
"$errormsg<br>";
                    
$sql_error $db->sql_error();
                    print 
$sql_error['code'] .": "$sql_error['message']. "<br>\n";
                    print 
"<pre>$sql</pre>";
                    print 
"</font>\n";
                    return 
FALSE;
                }
            else
                {
                    return 
$result;
                }
        }


function 
result($query$row) {
        
$query mysql_result($query$row);
        return 
$query;
    }
    
        
// стартуем
        
print " fix text<br>";
         
flush();
         
        
// сколько всего записей требуется обработать
         
$number mysql_query("SELECT COUNT(" $post_id ") FROM " .  $text_table);
        
$postsnum result($number0); // сколько всего записей обработать
        
$loopnum=intval($postsnum $number_post); // сколько будет пачек
        
$posts_left=($postsnum $number_post); // сколько не обработанных

        
print"number records to fix : $postsnum <br><br>";
        
flush();

        if (
$posts_left <> ){
            
$loopnum++;
        }

        
$posts_loc=0// номер начала пачки для записи (позже взять из txt)
        
$posts_default=$number_post;


        
// весь цикл
        
for ($y 1$y <= $loopnum$y++)
        {

        
// текущая пачка
         
print"$posts_loc ";
            
flush();

            if (
$y <> $loopnum)
            {
                
$sql "SELECT * FROM " $text_table " LIMIT $posts_loc,$posts_default ";
            } else {
                
$sql "SELECT * FROM " $text_table " LIMIT $posts_loc,$posts_left ";
            }

            
$result query($sql"error query");
            
$posts_count $db->sql_numrows($result);
            
$posts_data $db->sql_fetchrowset($result);
             print 
"Ok<br>";
            
flush();
            
            
// цикл для перезаписи
            
for ($i 0$i $posts_count$i++)
            {
                
$pid $posts_data[$i][$post_id]; // id записи
                
                // получаем запись
                
$message $posts_data[$i][$post_text];

                
// изменяем запись (регулярка)
                
$message preg_replace('\\[.*?\\]'' '$message);

                
// обновляем запись
                
$sql "UPDATE " $text_table " SET " $post_text " = \"$message\" WHERE " $post_id  "  = $pid ";
                
query($sql"error update");
            }
            
            
// следующая пачка (позже записать в txt)
            
$posts_loc=$posts_loc+$number_post;
        }



        
// конец
        
print"<br><br>fix all $postsnum records<br>"
sanek1991 вне форума   Ответить с цитированием
Старый 22.12.2020, 06:30   #27
sanek1991
Senior Member
Профессор
 
Регистрация: 21.06.2020
Сообщений: 859
Сказал(а) спасибо: 80
Получил(а) "Спасибо": 187
Нарушения: 0/0 (0)
Репутация: 74780

Thread Starter Re: MySQL replace

Кстати на локалке старый php и mysql, поэтому через mysql_connect

PHP код:
$hostname "localhost";
$username "root";
$password "";
$database "local_db";

$text_table "text_table"// имя таблицы для перезаписи
$post_text "post_text"// имя поля для перезаписи
$post_id "post_id"// имя поля с id
$number_post "200"// по сколько записей обрабатывать

// соединение к БД
$db mysql_connect($hostname$username$password); 
     
    if (!
$db) { 
        echo 
"error connect: " mysql_error(); 
        exit; 
    } 
     
    if (!
mysql_select_db($database)) { 
        echo 
"error db: " mysql_error(); 
        exit; 
    } 

Скрипт делаю универсальным. То есть только сменить настройки, и можно любые большие таблицы лопатить.
Было-бы хорошо, если-бы реальный программер довел до ума.
Осталось сделать пересоединение с БД, и запись текущего состояния в текстовик, что-бы можно было начать с места остановки.
sanek1991 вне форума   Ответить с цитированием
Старый 22.12.2020, 14:29   #28
XPraptor
Думаю, что надо худеть
Академик
 
Аватар для XPraptor
 
Регистрация: 22.06.2020
Сообщений: 1,791
Сказал(а) спасибо: 1,526
Получил(а) "Спасибо": 1,939
Нарушения: 0/0 (0)
Репутация: 608321

По умолчанию Re: MySQL replace

sanek1991, собственный опыт, он всегда полезен, но может луше загуглите, чтобы быстрее было
Плюс обязательно смените php на 7.4 на локалке, ну и mysql пусть не на 8, но хотя бы на 5.7, там другая скорость и другие возможности.

Сейчас уже конфиги в php и mysql полностью вменяемые и не придется как раньше ничего руками до-страивать, просто поставьте и всё.
Состояние бота google и полезные ресурсы: всё про гугл
XPraptor вне форума   Ответить с цитированием
Старый 22.12.2020, 17:20   #29
vandamme
Junior Member
Студент
 
Аватар для vandamme
 
Регистрация: 04.08.2020
Сообщений: 20
Сказал(а) спасибо: 3
Получил(а) "Спасибо": 7
Нарушения: 0/0 (0)
Репутация: 1228

По умолчанию Re: MySQL replace

есть текстовые редакторы, отлично открывающие гиговые файлы, вроде akelpad называется, давненько пользовался.
vandamme вне форума   Ответить с цитированием
Старый 22.12.2020, 17:58   #30
XPraptor
Думаю, что надо худеть
Академик
 
Аватар для XPraptor
 
Регистрация: 22.06.2020
Сообщений: 1,791
Сказал(а) спасибо: 1,526
Получил(а) "Спасибо": 1,939
Нарушения: 0/0 (0)
Репутация: 608321

По умолчанию Re: MySQL replace

vandamme, Да проблема не в замене, замену и PowerGREP за пару сек сделает во всей базе, задача потом эту базу назад залить, и я так понял в рабочую (то есть она работает уже и надо заменить на рабочей без остановки).
XPraptor вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка - MySQL query error [1615]: Prepared statement needs to be re-prepared sanek1991 Хостинг и домены 19 29.07.2020 19:24
Помогите с SQL запросом replace sanek1991 Веб-строительство 34 16.07.2020 13:26
Переход с php5 на php7, если много mysql запросов ziliboba0213 Веб-строительство 31 14.07.2020 18:44


Текущее время: 02:11. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc. Перевод: zCarot