forum.bitel.ru http://forum.bitel.ru/ |
|
удаление старых таблиц http://forum.bitel.ru/viewtopic.php?f=22&t=8839 |
Страница 1 из 1 |
Автор: | survivor [ 16 янв 2014, 19:01 ] |
Заголовок сообщения: | удаление старых таблиц |
Добрый день! За годы работы биллинга накопилось аж 800 таблиц. Многие из них регулярно чищу, какие-то данные храню в течение года, какие-то полгода, что-то не более трех месяцев. В результате - очень много пустых таблиц. Как-то попробовал их дропнуть - биллинг отказался загружаться. Пришлось возвращать бакапы. Скрипт на вики для удаления старых таблиц видел, странно но он тоже просто дропает старые таблицы... Хочу попробовать еще раз. Речь про эти таблицы: bgs_query_log_yyyymm log_error_1_yyyymm log_function_process_yyyymm log_server_1_yyyymm log_session_net_1_yyyymm session_account_1_yyyymm session_detail_1_yyyymm web_query_log_yyyymm Можно ли их дропать спокойно или есть на них какие-то линки из других таблиц и биллинг не запустится из-за нарушения целостности базы? Биллинг 4.6 580 |
Автор: | Phricker [ 16 янв 2014, 21:12 ] |
Заголовок сообщения: | Re: удаление старых таблиц |
Периодически удаляю кроме bgs_query_log_yyyymm ибо временами нужно лезть в предыдущие периоды. Удаляю скриптом который создает модуль DBA. По-моему начинал с 5.1/5.2 версии подобным страдать, за 4.6 не могу ничего сказать. |
Автор: | snark [ 12 фев 2014, 16:57 ] |
Заголовок сообщения: | Re: удаление старых таблиц |
survivor писал(а): Биллинг 4.6 580 У меня на 5.0 (почти то же самое что и 4.6) сейчас работает вот такой вариант скрипта из вики: Код: /** * Удаление старых таблиц */ import java.sql.*; import java.util.*; import java.util.regex.*; import java.lang.Runtime; import java.lang.Process; import bitel.billing.common.*; import bitel.billing.server.util.*; public void main(setup, con, conSlave) { private Calendar currentDate = new GregorianCalendar(); private HashMap checkTables = new HashMap(); // kernel checkTables.put("^bgs_query_log_(\\d{6})$", 3); // месячная таблица запросов клиентов биллинга к серверу checkTables.put("^data_log_error_(\\d{6})$", 1); // ошибки обработки логов checkTables.put("^log_function_process_(\\d{6})$", 1); // логи обработки событий функциями скриптов checkTables.put("^log_gscript_process_(\\d{6})$", 1); // логи выполнения глобальных скриптов checkTables.put("^source_data_(\\d{6})$", 3); // данные о загруженных часовых логах checkTables.put("^web_query_log_(\\d{6})$", 3); // журнал web-запросов клиентов на странице статистики // dialup private int dialupModuleId = 1; checkTables.put("^log_error_" + dialupModuleId + "_(\\d{6})$", 1); // ошибки авторизации checkTables.put("^log_server_" + dialupModuleId + "_(\\d{6})$", 1); // радиус запросы сессий checkTables.put("^log_session_" + dialupModuleId + "_(\\d{6})$", 13); // лог сессии checkTables.put("^session_account_" + dialupModuleId + "_(\\d{6})$", 13); // детализации наработки сессии по услугам checkTables.put("^session_detail_" + dialupModuleId + "_(\\d{6})$", 13); // детализация наработки сессии // постоянно пустые таблицы checkTables.put("^login_account_" + dialupModuleId + "_(\\d{6})$", 1); // наработка по логину за месяц (используется системой ограничений) checkTables.put("^log_session_net_" + dialupModuleId + "_(\\d{6})$", 1); // сети, маршрутизируемые через выданные сессиям ip адреса checkTables.put("^tariff_detail_" + dialupModuleId + "_(\\d{6})$", 1); // детализация по тарифу (см. модуль бухгалтерии) // card //private int cardModuleId = 2; //checkTables.put("^card_dealer_pay_" + cardModuleId + "_(\\d{6})$", 13); // платежи дилеров // npay private int npayModuleId = 3; checkTables.put("^npay_add_cost_detail_" + npayModuleId + "_(\\d{6})$", 1); // детализация сумм до которых "доводятся" доводящие абонплаты. используется макросом вычисления суммы позиции модуля bill checkTables.put("^npay_detail_" + npayModuleId + "_(\\d{6})$", 13); // детализация начислений модуля (может использоваться сторонними системами) // ipn private int ipnModuleId = 4; checkTables.put("^ipn_contract_data_" + ipnModuleId + "_(\\d{6})$", 1); // аггрегированная наработка по адресам // mps private int mpsModuleId = 5; checkTables.put("^mps_payment_" + mpsModuleId + "_(\\d{6})$", 13); // платежи за месяц String backupDir = "/home/backup/old_tables"; Process mkdir = Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "/bin/mkdir -p " + backupDir }); int mkdirDone = mkdir.waitFor(); if (mkdirDone != 0) { return; } try { String query = "SHOW TABLES FROM bgbilling WHERE Tables_in_bgbilling REGEXP '_[0-9]{6}$'"; PreparedStatement ps = con.prepareStatement(query); ResultSet rs = ps.executeQuery(); while (rs.next()) { String tableName = rs.getString(1); Boolean dropTable = false; for (Map.Entry e : checkTables.entrySet()) { String tableNameRegexp = e.getKey(); int tableTTL = e.getValue(); Pattern p = Pattern.compile(tableNameRegexp); Matcher m = p.matcher(tableName); if (m.matches()) { String tableDate = m.group(1); int yy = Utils.parseIntString(tableDate.substring(0, 4)); int mm = Utils.parseIntString(tableDate.substring(4, 6)); if (yy > 0 && mm > 0) { Calendar checkDate = new GregorianCalendar(); //checkDate = currentDate.clone(); checkDate.set(Calendar.MONTH, mm - 1); checkDate.set(Calendar.YEAR, yy); if (TimeUtils.monthsDelta(checkDate, currentDate) >= tableTTL) { dropTable = true; } } } } if (dropTable) { String[] args = { "/bin/sh", "-c", "/usr/bin/mysqldump --user=bill --password=bgbilling --quick --single-transaction --default-character-set=cp1251 bgbilling " + tableName + " | /bin/gzip > " + backupDir +"/" + tableName + ".sql.gz" }; Process dumper = Runtime.getRuntime().exec(args); int dumperDone = dumper.waitFor(); if (dumperDone == 0) { print(tableName); PreparedStatement psd = con.prepareStatement("DROP TABLE IF EXISTS " + tableName); psd.executeUpdate(); psd.close(); } else { print("dumper exit code = " + dumper.exitValue() + " on table: " + tableName); } } } ps.close(); } catch (Exception e) { e.printStackTrace(); } } Вдруг пригодится. |
Автор: | survivor [ 19 фев 2014, 14:46 ] |
Заголовок сообщения: | Re: удаление старых таблиц |
Спасибо ![]() |
Автор: | max [ 07 мар 2014, 22:51 ] |
Заголовок сообщения: | Re: удаление старых таблиц |
а куда его вставлять? |
Автор: | snark [ 11 мар 2014, 15:51 ] |
Заголовок сообщения: | Re: удаление старых таблиц |
max писал(а): а куда его вставлять? Автоматизация -> Глобальные скрипты поведения Текущая, рабочая версия скрипта здесь. |
Автор: | skyb [ 11 мар 2014, 18:08 ] |
Заголовок сообщения: | Re: удаление старых таблиц |
запили на вику чтоль и поддерживай когда обновлятся будеш, как всей толпой поддерживаем синхронизацию услуг ТП |
Автор: | snark [ 11 мар 2014, 18:37 ] |
Заголовок сообщения: | Re: удаление старых таблиц |
В вики есть скрипт ![]() Я планирую запилить динкод для чистки inet после запуска у себя 6.0/6.1. |
Автор: | skyb [ 12 мар 2014, 05:42 ] |
Заголовок сообщения: | Re: удаление старых таблиц |
snark писал(а): В вики есть скрипт ![]() Я планирую запилить динкод для чистки inet после запуска у себя 6.0/6.1. аха, давай, когда ты уже там перейдешь? |
Автор: | snark [ 12 мар 2014, 14:58 ] |
Заголовок сообщения: | Re: удаление старых таблиц |
skyb писал(а): когда ты уже там перейдешь? Гоу флудить ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |