Страницы

Поиск по вопросам

Показаны сообщения с ярлыком phpmyadmin. Показать все сообщения
Показаны сообщения с ярлыком phpmyadmin. Показать все сообщения

понедельник, 24 февраля 2020 г.

Сохранять базу данных каждую неделю

#mysql #phpmyadmin #события


Возможно ли используя events в phpMyAdmin создать event который позволит мне каждую
неделю сохранять базу данных в папку? 
    


Ответы

Ответ 1



Чтобы сохранять БД каждую неделю (каждый понедельник в 00:00), можно с помощью cron'a выполнять команду mysqldump В правило cron 00 00 * * 1 mysqldump -u{пользователь} -p{пароль} --all-databases > /{path_to_backups}/mysqldump_`$(date +\%Y\%m\%d\%H\%M\%S)`.sql

воскресенье, 16 февраля 2020 г.

Сохранять базу данных каждую неделю

#mysql #phpmyadmin #события


Возможно ли используя events в phpMyAdmin создать event который позволит мне каждую
неделю сохранять базу данных в папку? 
    


Ответы

Ответ 1



Чтобы сохранять БД каждую неделю (каждый понедельник в 00:00), можно с помощью cron'a выполнять команду mysqldump В правило cron 00 00 * * 1 mysqldump -u{пользователь} -p{пароль} --all-databases > /{path_to_backups}/mysqldump_`$(date +\%Y\%m\%d\%H\%M\%S)`.sql

четверг, 13 февраля 2020 г.

Ошибка при указании соединения для controluser в конфигурации [закрыт]

#mysql #sql #база_данных #phpmyadmin


        
             
                
                    
                        
                            Закрыт. Этот вопрос не по теме. Ответы на него в данный
момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он соответствовал тематике «Stack Overflow на русском».
                        
                        Закрыт 3 года назад.
                                                                                
           
                
        


Прошу помощи у гуру MySQL. Такую вот ошибку выдает pma.
Что делать?
    


Ответы

Ответ 1



В снимках экрана ошибка "Access denied for user root (using password: NO)" и фигурирует "controluser". Вам необходимо правильно установить имя пользователя и пароль для controluser'а. Они используются для соединения с хранилищем конфигурации phpMyAdmin (configuration storage), где хранятся настройки для дополнительный функций. Хранилище конфигурации не обязательно, phpMyAdmin может работать без него. Поэтому у вас есть два пути: Выключить хранилище конфигурации: $cfg['Servers'][$i]['pmadb'] = null; в config.inc.php. Настроить controluser'а: создать пользователя в MySQL, предоставить ему определённый набор привилегий, затем добавить его имя и пароль в config.inc.php: $cfg['Servers'][$i]['controluser'] = '<ИМЯ_ПОЛЬЗОВАТЕЛЯ>'; $cfg['Servers'][$i]['controlpass'] = '<ПАРОЛЬ>';

Ответ 2



я выключил хранилище конфигурации, а потом обратно включил, помогло.

воскресенье, 2 февраля 2020 г.

Удалить дубликаты из таблицы

#php #mysql #sql #postgresql #phpmyadmin


Есть таблица 



Как мне удалить дубликаты запросом sql?
    


Ответы

Ответ 1



1) Через другую таблицу CREATE TEMPORARY TABLE tmp_tab AS SELECT DISTINCT * FROM your_table; DELETE FROM your_table; INSERT INTO your_table SELECT * FROM tmp_tab; DROP TABLE tmp_tab; 2) Добавлением индекса. Лично сам так не пробовал, но говорят работает. Добавляется уникальный индекс, а дубли удаляются. Актуально для MySQL ALTER IGNORE TABLE your_table ADD UNIQUE INDEX(id_category, id_product, position);

Ответ 2



PostgreSQL Можно решить задачу одним запросом с CTE (где T - исходная таблица): with td as (delete from T returning *), tt as (select row_number() over(partition by id_category,id_product,position order by id_category,id_product,position) num, * from td) insert into T select id_category,id_product,position from tt where num=1;

Ответ 3



MySQL: Можно создать столбец с уникальными значениями. С помощью него удалить дубликаты, потом удалить столбец(а лучше оставить и навесить на него уникальный индекс). Что довольно ресурсоёмко, но вариант. Создать столбец и заполнить его натуральными числами можно так: ALTER TABLE Test ADD Id INT; UPDATE Test SET Id = @I := @I + 1 /*тут можно задать нужную сортировку при желании, я добавил по A, B*/ ORDER BY A, B, (SELECT @I := 0) В итоге в таблице Test появится колонка id, заполненная числовой последовательностью отсортированной по столбцам A, B. UPD: Есть несколько экстравагантный способ:) Сначала пометить строки на удаление, потом удалить. Используя опять же накопление в переменную. Для наглядности покажу все скрипты в рабочем виде. Создаём табличку и заполняем: CREATE TABLE TEST_DUPLICATE( A VARCHAR(20), B VARCHAR(20) ); INSERT TEST_DUPLICATE SELECT 'AAA', 'BBB'; INSERT TEST_DUPLICATE SELECT 'AAA', 'BBB'; INSERT TEST_DUPLICATE SELECT 'BBB', 'BBB'; INSERT TEST_DUPLICATE SELECT 'AAA', 'AAA'; INSERT TEST_DUPLICATE SELECT 'BBB', 'BBB'; INSERT TEST_DUPLICATE SELECT 'AAA', 'AAA'; INSERT TEST_DUPLICATE SELECT 'AAA', 'BBB'; SELECT * FROM TEST_DUPLICATE; Вот её содержимое: AAA BBB AAA BBB BBB BBB AAA AAA BBB BBB AAA AAA AAA BBB Теперь пометим в поле B дубликаты строкой DUPLICATED UPDATE TEST_DUPLICATE SET B = CONCAT( CASE WHEN A=@A AND B=@B THEN 'DUPLICATED' ELSE B END , /*тут фейковое слагаемое, просто чтобы изменить значения @A и @B*/ CASE WHEN CONCAT((@A:=A),(@B:=B)) >= '' THEN '' END) ORDER BY A, B, (SELECT @A:=''), (SELECT @B:='') ; SELECT * FROM TEST_DUPLICATE; Теперь содержимое таблицы: AAA BBB AAA DUPLICATED BBB BBB AAA AAA BBB DUPLICATED AAA DUPLICATED AAA DUPLICATED Удаляем помеченные строки: DELETE FROM TEST_DUPLICATE WHERE B = 'DUPLICATED'; SELECT * FROM TEST_DUPLICATE; получили что хотели: AAA BBB BBB BBB AAA AAA Есть определённая критика такого решения. Но я для простоты самого подхода описал. При желании можно тему развить и использовать. Дополнение: Всё то же самое можно сделать и на других СУБД, заменив накопление в переменную аналитическими функциями ROW_NUMBER, LEAD. В других СУБД это и выглядеть будет "симпатичней".

пятница, 24 января 2020 г.

Ошибка phpmyadmin: “ Хранилище конфигурации phpMyAdmin не полностью настроено, некоторые расширенные функции были отключены”

#php #mysql #phpmyadmin #расширения


Добрый день. Настраиваю дополнительные возможности phpmyadmin. Появилась ошибка: 


  Хранилище конфигурации phpMyAdmin не полностью настроено, некоторые расширенные
функции были отключены  


Версии:
phpmyadmin 4.7.5
MySQL 5.6
Apach 2.4
PHP: 5.6.3
Работаю по Windows7 X64


Создал пользователя pma, дал ему глобальные привилегии(см. скрин).

Cоздал базу данных phpmyadmin, импортировал файл create_tables.sql из 
phpMyAdmin\sql, а потом файл upgrade_tables_4_7_0+.sql(как сказано в 
инструкции к phpmyadmin) 
Создал файл config.inc.php, вот что внутри:



После этого и появилась ошибка. Как можно исправить и правильно подключить расширения?
    


Ответы

Ответ 1



1) Импортируйте файл /scripts/create_tables.sql находящийся в phpMyAdmin. 2) Добавьте в конфигурационный файл config.inc.php строку: $cfg['Servers'][$i]['userconfig'] = 'pma_userconfig'; 3) Очистите куки браузера и войдите в phpMyAdmin. Инфу взял от сюду https://forum.php-myadmin.ru/viewtopic.php?id=2213

четверг, 23 января 2020 г.

Ошибка синтаксиса при вставке данных в БД

#php #sql #phpmyadmin


Никак не пойму где я ошибаюсь.
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB
server version for the right syntax to use near ''persons' VALUES ('123', dfgh, kkk,
33)' at line 1

$result = mysql_query("INSERT INTO 'persons' VALUES ($idInput, $nameInput,        
 $lnameInput, $ageInput)" , $db) or die(mysql_error());

    


Ответы

Ответ 1



кавычки вокруг строковых значений кто будет проставлять? и поставьте MySQL Workbench, он автоматически подсвечивает строку с некорректным синтаксисом, в нем и дебажьте ваши запросы p.s. и у вас еще одна ошибка (первопричина, кстати) - одинарные кавычки вокруг имени таблицы mysql> use 'db'; #здесь корректно, но излишне, это внутренняя команда mysql # хотя use db тоже сработает (и быстрее печатать) Database changed mysql> show tables; +--------------+ | Tables_in_db | +--------------+ | OrderHistory | | users | +--------------+ 2 rows in set (0.00 sec) #здесь некорректно, не по стандарту SQL mysql> select * from 'users'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''users'' at line 1 во первых, в этом запросе кавычки вокруг имени таблицы не нужны, а во вторых, правильные кавычки для sql - это backticks: mysql> select * from `users`; +----+------------+- | id | login ответ к комменту касательно кавычек вокруг полей типа INT/DOUBLE/FLOAT и т.д.: они возможны, но не обязательны. При малой нагрузке лишний байтик потраченный на передачу кавычек незаметен. При большой нагрузке, при вставке больших объемов данных (когда вы вставляете данные вплоть до max_allowed_packet) , когда у вас идет множество числовых полей, вы получите дополнительную нагрузку/придется снизить количество рядов, которые вы можете вставить одновременнно. Кроме того, чисто семантически это дает понять, когда вы просматриваете какой-нибудь большой запрос, что цифры должны вставляться в колонку с числовым типом. Когда вы видите такой запрос, вы понимаете, что в этом есть логика и намерение.

воскресенье, 29 декабря 2019 г.

Как авторизоваться в phpMyAdmin?

#phpmyadmin #mysql


При входе в phpmyadmin, просить логин и пароль. Откуда его брать? Я новичок, объясните,
пожалуйста по подробнее.    


Ответы

Ответ 1



Логин: root Пароль: root Или: Логин: mysql Пароль: mysql Ну или иногда еще так Логин: root Пароль пустой А вообще, phpMyAdmin спрашивает доступы к вашей базе данных. Соответственно логин и пароль нужно указывать для созданного пользователя БД. Или стандартные, которые я указал выше. Если выдает ошибку 2002 Cannot log in to the MySQL server Отредактируйте файл phpmyadmin/config.inc.php, заменив вот эту строчку: $cfg['Servers'][$i]['host'] = 'localhost'; на вот эту: $cfg['Servers'][$i]['host'] = '127.0.0.1'; Полный листинг Возможно, вы отредактировали конфигурационный файл MySQL, чтобы он запускался на другом порту. В этом случае, новый порт нужно указать и в конфигурационном файле phpMyAdmin (см. последнюю строчку из листинга выше). Кроме того, сам конфигурационный файл config.inc.php, должен лежать в корневой папке phpMyAdmin. Перед стартом phpMyAdmin MySQL уже должен быть запущен. Проверьте, есть ли соответствующий процесс в диспетчере задач. Проверьте, есть ли у пользователя, от имени которого вы пытаетесь авторизоваться, соответствующие права. Если все вышеперечисленное не помогло, возможно, сам MySQL криво встал. Попробуйте его переустановить.

Ответ 2



В убунту делаем так: $ cd /etc/mysql/ $ sudo vim debian.cnf И вот ответ : Automatically generated for Debian scripts. DO NOT TOUCH! [client] host = localhost user = debian-sys-maint //Это пользователь password = uTjAXFyQFsySSJOZ //Это пароль socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade] host = localhost user = debian-sys-maint //Это пользователь password = uTjAXFyQFsySSJOZ //Это пароль socket = /var/run/mysqld/mysqld.sock

Ответ 3



Мне помогла вот эта вещь в настройках: Логин: root Пароль пустой Благодарю

среда, 25 декабря 2019 г.

Подключение к БД phpMyAdmin

#php #html #phpmyadmin #localhost


Не получается подключиться к базе данных, пробовал простейший запрос с выведением
ошибки (приведен ниже) ничего не вышло. При попытке входа с корректными данными и некорректными
ошибка не появляется. Вообще никаких действий не происходит




 Мой сайт







С html я знаком чуть больше суток, возможно ошибся в какой-то совершенно очевидной
и элементарной вещи.
Файл открываю через localhost.
Wamosercer 3.1.0
MySQL бд phpMyadmin

Может быть кто-то таки поймет в чем моя ошибка? 
    


Ответы

Ответ 1



Попробуйте вот так.

Ответ 2



Это расширение устарело с версии PHP 5.5.0, и удалено в версии 7.0.0. Вместо него используйте mysqli или PDO

пятница, 13 декабря 2019 г.

Ошибка в phpMyAdmin: Access denied for user

#php #mysql #ubuntu #phpmyadmin


Почему в phpmyadmin при входе выдает ошибку #1698 - Access denied for user 'root'@'localhost'.
Установку выполнял следующим образом:

sudo tasksel install lamp-server
sudo apt-get install phpmyadmin


Пароль назначил. OC Linux mint. Пробовал ввести в консоли mysql -u root -p После
потребовало ввести и снова выдало ошибку #1698 - Access denied for user 'root'@'localhost'
    


Ответы

Ответ 1



Ошибка Access denied for user 'root'@'localhost' означает, что у пользователя root с указываемым вами паролем нет прав доступа к СУБД. Видимо пароль не установился или установился не верно, либо вместо 'root'@'localhost' был установлен пользователь 'root'@127.0.0.1. Попробуйте в консоли набрать mysql -h 127.0.0.1 -u root -p Если после этого вас пустит в СУБД, необходимо создать дополнительного пользователя 'root'@'localhost' GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION IDENTIFIED BY 'password' Если не пускает, значит, нужно восстанавливать пароль для root. Найдите конфигурационный файл my.cnf и добавьте в секцию [mysqld] директиву skip-grant-tables, которая отключит проверку прав доступа [mysqld] ... skip-grant-tables После чего перезагрузите сервер. Теперь вы можете входить MySQL без пароля, войдите и переустановите пароль SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password'); После этого следует убрать директиву skip-grant-tables из my.cnf и перезапустить сервер.

Ответ 2



в новых версиях после MySQL 5.7.6 команда изменения пароля несколько отличается: ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

четверг, 5 декабря 2019 г.

Как выводить всех учеников, которые должны произвести оплату?

#php #html #mysql #phpmyadmin


Пишу на PHP сайт для учета данных, оплаты и посещаемости учеников. Тех, кто приходит
к репетитору.
В MySQL есть таблица pays, в которую заносится последняя оплата ученика. И есть таблица
dates, куда добавляются даты посещения каждого ученика.
Оплата производится за 8 занятий. 
Вопрос: никак не могу додуматься, как можно сделать, чтобы выводить всех учеников,
которые должны произвести оплату и у которых седьмое или восьмое занятие по счету?
И чтобы не исчезало, пока не добавлено в таблицу pays.  
    


Ответы

Ответ 1



SELECT dates.user_id FROM dates LEFT JOIN pays ON pays.user_id = dates.user_id WHERE pays.id IS NULL GROUP BY dates.user_id HAVING COUNT(dates.user_id) IN (7,8) Берем все записи из dates, джойним pays с оплатами, делаем условие того, что оплаты не было произведено, группируем по user_id и смотрим чтобы по пользователю совпадало условие что у него 7 или 8 занятие. Вы спросили про количество посещений во второй месяц, пока самое простое,что придумал, так это так, получилось конечно как-то помоему колхозно, но ладно. Выбираем все даты, джойним pays, групируем по user_id, смотрим если кол-во разных дат посещений входит равно 7*кол-ву оплат или 8*кол-во оплат, (кол-во оплат минимум равно 1), то пользователь входит в интервал и его можно предупредить. У pays обязательно должен быть уникальный идентификатор (id), dates обязательно должна иметь дату посещения (date). SELECT dates.user_id, COUNT(DISTINCT pays.id)+1 pcount FROM dates LEFT JOIN pays ON pays.user_id = dates.user_id GROUP BY dates.user_id HAVING COUNT(DISTINCT dates.date) IN (7*pcount, 8*pcount) Как короче и эффектнее написать второй, не пришло пока в голову.

понедельник, 8 июля 2019 г.

INSERT запрос без VALUES

Привет всем. Вот вопрос, который я имел в виду (не для SET):
Есть запрос такой:
mysqli_query($dataBase, "INSERT INTO `Users` VALUES ('','$email','$name','$pass','$gend','$startImg');");
Который хотелось бы записать примерно так:
INSERT INTO `Users` VALUES `id` = 2, `email` = '$email', `nickname` = '$name';
Как это сделать правильно. PDO желания использовать нет (имеенованые плейсхолдеры).


Ответ

INSERT INTO `Users` SET `id` = 2, `email` = '$email', `nickname` = '$name';
Ссылка на документацию, второй вариант синтаксиса.

понедельник, 24 июня 2019 г.

Как в PHPMyAdmin посмотреть триггеры в MySQL?

Как в PHPMyAdmin посмотреть триггеры в MySQL? Не могу найти этот раздел, есть раздел процедуры, но там написано "у вас нет прав для создания процедур" . Я свой триггер загрузил через SQL консоль в PHPMyAdmin, и он работает, но как его найти не знаю.


Ответ

Заходите в БД и в верхней панели наводите курсор на "Ещё":

четверг, 14 марта 2019 г.

Ошибка синтаксиса при вставке данных в БД

Никак не пойму где я ошибаюсь. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''persons' VALUES ('123', dfgh, kkk, 33)' at line 1
$result = mysql_query("INSERT INTO 'persons' VALUES ($idInput, $nameInput, $lnameInput, $ageInput)" , $db) or die(mysql_error());


Ответ

кавычки вокруг строковых значений кто будет проставлять? и поставьте MySQL Workbench, он автоматически подсвечивает строку с некорректным синтаксисом, в нем и дебажьте ваши запросы
p.s. и у вас еще одна ошибка (первопричина, кстати) - одинарные кавычки вокруг имени таблицы
mysql> use 'db'; #здесь корректно, но излишне, это внутренняя команда mysql # хотя use db тоже сработает (и быстрее печатать) Database changed mysql> show tables; +--------------+ | Tables_in_db | +--------------+ | OrderHistory | | users | +--------------+ 2 rows in set (0.00 sec) #здесь некорректно, не по стандарту SQL mysql> select * from 'users'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''users'' at line 1
во первых, в этом запросе кавычки вокруг имени таблицы не нужны, а во вторых, правильные кавычки для sql - это backticks:
mysql> select * from `users`; +----+------------+- | id | login
ответ к комменту касательно кавычек вокруг полей типа INT/DOUBLE/FLOAT и т.д.: они возможны, но не обязательны. При малой нагрузке лишний байтик потраченный на передачу кавычек незаметен.
При большой нагрузке, при вставке больших объемов данных (когда вы вставляете данные вплоть до max_allowed_packet) , когда у вас идет множество числовых полей, вы получите дополнительную нагрузку/придется снизить количество рядов, которые вы можете вставить одновременнно.
Кроме того, чисто семантически это дает понять, когда вы просматриваете какой-нибудь большой запрос, что цифры должны вставляться в колонку с числовым типом.
Когда вы видите такой запрос, вы понимаете, что в этом есть логика и намерение.

среда, 12 декабря 2018 г.

Ошибка в phpMyAdmin: Access denied for user

Почему в phpmyadmin при входе выдает ошибку #1698 - Access denied for user 'root'@'localhost'. Установку выполнял следующим образом:
sudo tasksel install lamp-server sudo apt-get install phpmyadmin
Пароль назначил. OC Linux mint. Пробовал ввести в консоли mysql -u root -p После потребовало ввести и снова выдало ошибку #1698 - Access denied for user 'root'@'localhost'


Ответ

Ошибка Access denied for user 'root'@'localhost' означает, что у пользователя root с указываемым вами паролем нет прав доступа к СУБД.
Видимо пароль не установился или установился не верно, либо вместо 'root'@'localhost' был установлен пользователь 'root'@127.0.0.1. Попробуйте в консоли набрать
mysql -h 127.0.0.1 -u root -p
Если после этого вас пустит в СУБД, необходимо создать дополнительного пользователя 'root'@'localhost'
GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION IDENTIFIED BY 'password'
Если не пускает, значит, нужно восстанавливать пароль для root. Найдите конфигурационный файл my.cnf и добавьте в секцию [mysqld] директиву skip-grant-tables, которая отключит проверку прав доступа
[mysqld] ... skip-grant-tables
После чего перезагрузите сервер. Теперь вы можете входить MySQL без пароля, войдите и переустановите пароль
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
После этого следует убрать директиву skip-grant-tables из my.cnf и перезапустить сервер.

вторник, 9 октября 2018 г.

Как выводить всех учеников, которые должны произвести оплату?

Пишу на PHP сайт для учета данных, оплаты и посещаемости учеников. Тех, кто приходит к репетитору. В MySQL есть таблица pays, в которую заносится последняя оплата ученика. И есть таблица dates, куда добавляются даты посещения каждого ученика. Оплата производится за 8 занятий Вопрос: никак не могу додуматься, как можно сделать, чтобы выводить всех учеников, которые должны произвести оплату и у которых седьмое или восьмое занятие по счету? И чтобы не исчезало, пока не добавлено в таблицу pays.


Ответ

SELECT dates.user_id FROM dates LEFT JOIN pays ON pays.user_id = dates.user_id WHERE pays.id IS NULL GROUP BY dates.user_id HAVING COUNT(dates.user_id) IN (7,8)
Берем все записи из dates, джойним pays с оплатами, делаем условие того, что оплаты не было произведено, группируем по user_id и смотрим чтобы по пользователю совпадало условие что у него 7 или 8 занятие.
Вы спросили про количество посещений во второй месяц, пока самое простое,что придумал, так это так, получилось конечно как-то помоему колхозно, но ладно.
Выбираем все даты, джойним pays, групируем по user_id, смотрим если кол-во разных дат посещений входит равно 7*кол-ву оплат или 8*кол-во оплат, (кол-во оплат минимум равно 1), то пользователь входит в интервал и его можно предупредить. У pays обязательно должен быть уникальный идентификатор (id), dates обязательно должна иметь дату посещения (date).
SELECT dates.user_id, COUNT(DISTINCT pays.id)+1 pcount FROM dates LEFT JOIN pays ON pays.user_id = dates.user_id GROUP BY dates.user_id HAVING COUNT(DISTINCT dates.date) IN (7*pcount, 8*pcount)
Как короче и эффектнее написать второй, не пришло пока в голову.