«Node js & Подключение модулей без явного использования require или аналог namespace» и «MySql»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
Нет описания правки
 
imported>Vix
Нет описания правки
 
Строка 1: Строка 1:
При работе с node.js часто приходится подключать файлы, расположенные не в
==Help MySql==
текущей директории, и даже не в поддереве текущего каталога. Поэтому часто в
* Список пользователей:
модулях можно наблюдать что-то вроде
SELECT USER from mysql.user;
* Создание пользователя:
CREATE USER 'user'@'localhost' IDENTIFIED BY 'secret';
* Удаление пользователя:
DROP USER user@localhost;
* Предоставить права пользователю:
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost';
* Предоставить супер права пользователю:
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost' WITH GRANT OPTION;
* Права равные root для работы через phpmyadmin
GRANT ALL PRIVILEGES ON  *.* TO 'user'@'%' REQUIRE NONE WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;


var obj = require('../../../a/b/c/someModule');
==Настройка PhpMyAdmin==
Процедура «переподключения» phpMyAdmin на работу с внешним сервером достаточно проста, но вызывает вопросы у тех, кто занимается всем этим недавно или неглубоко.


В данной статье мы рассмотрим несколько вариантов подключения phpMyAdmin ко внешнему серверу, так как задачи и условия у всех разные. В примере я использую сервер баз данных MariaDB, ОС Ubuntu и phpMyAdmin версии 4.5.4, что практически не важно, так как всё достаточно просто. PhpMyAdmin установлен на домашний ПК, но с тем же успехом он может быть настроен и на удалённом сервере. Имеется ввиду, что всё прикладное ПО, такое как непосредственно сам сервер БД, http-сервер и php у вас уже установлено.


Для меня гораздо удобнее подключать файлы относительно корня проекта (модуля),
* Пример первый (доступ с паролем).
например


var obj = require(base_dir + '/a/b/c/someModule');
Сервер баз данных расположен на машине с адресом 10.10.1.10. PhpMyAdmin устанавливаем на локальный ПК с адресом 10.10.1.20. Необходимо убедиться, что сервер баз данных принимает внешние соединения. Правим my.cnf (/etc/mysql/my.cnf). В строке bind-address по умолчанию указан адрес 127.0.0.1, что запрещает серверу принимать внешние соединения. Заменяем его на 0.0.0.0, что разрешит внешние соединения с любого адреса. В целях безопасности лучше уточнить адрес, если вы не планируете подключаться к серверу из разных источников. В этом примере будет использоваться строка следующего вида:


bind-address = 10.10.1.20


Однако и в этом случае довольно много писанины и необходимо откуда-то получать
Сохраняем и перезагружаем.
base_dir.
Для себя я нашел решение проблемы, позволяющее больше не писать require и не
узнавать base_dir:


  var obj = lib.a.b.c.someModule;
  sudo service mysql restart


На ПК (или другой удалённый сервер) устанавливаем phpMyAdmin.


sudo apt install phpmyadmin


Идея решения
В процессе установки отказываемся от конфигурации (конфигурировать нечего; сервер баз данных на удалённой машине).


Далее правим конфигурационный файл phpMyAdmin config.inc.php (/etc/phpmyadmin/config.inc.php). Если это была свежая установка и на локальном хосте нет сервера баз данных, то удаляем все строки (кроме первой «<?php») и пишем следующее:


Решение проблемы — создание хитрого «класса» (да простят меня гуру javascript за
/* External Server #1 */
такое слово), свойствами которого являются директории и файлы указанной при
  $i++;
создании класса директории. Если свойство-директория не является модулем, то
  $cfg['Servers'][$i]['verbose'] = 'Server Name';
данное свойство также является объектом нашего класса, свойствами которого
  $cfg['Servers'][$i]['host'] = '10.10.1.10';
являются директории и файлы этой директории.
  $cfg['Servers'][$i]['connect_type'] = 'tcp';
  $cfg['Servers'][$i]['extension'] = 'mysqli';
  $cfg['Servers'][$i]['auth_type'] = 'cookie';
  $cfg['Servers'][$i]['AllowNoPassword'] = false;


Чтобы стало понятнее — приведу пример. Предположим у нас имеется следующая
Вместо Server Name вписываем что угодно. Сохраняем и закрываем файл.
структура проекта:


==Конвертирование базы из postgresql в mysql==
* скачиваем [https://github.com/ChrisLundquist/pg2mysql pg2mysql]


Содержимое файлов:
git clone https://github.com/ChrisLundquist/pg2mysql.git
\a\b\Foo.js
  cd pg2mysql
\a\c\Bar.js
  \a\index.js


var LazyLoader = require('./LazyLoader');
* сохраняем дамп из postgresql ('''пример сохранение всех таблиц для wordpress - wp*''')
global.lib = new LazyLoader(__dirname); 
  sudo -u postgres pg_dump --quote-all-identifiers --no-acl --no-owner --table=wp_* --format p --data-only wordpress -f wordpress_pgsql.sql
  var foo = new lib.a.b.Foo();
console.log(foo.name);
console.log(foo.bar.name);


* конвертируем в формат mysql
php pg2mysql_cli.php worpress_pgsql.sql wordpress_mysql.sql


* теперь необходимо заменить все таблицы с `"public"."wp_*"` на 'wp_*` это можно сделать в редакторе по F4
* не забудьте исправить '''"` (''' на ''''('''
* теперь меняем sql команду с INSERT на REPLACE так же по F4
* все, дамп можно заливать в базу, предварительно создайте из wordpress начальную структуру таблиц через install и потом вносите данные.


Foo.js
'''ИСТОЧНИКИ'''
<hr>
* [http://www.opennet.ru/docs/RUS/mysqladm/userman.html Управление пользователями в MySQL]
* [https://proft.me/2011/07/19/mysql-poleznye-komandy-i-nastrojki/ mysql: полезные команды и настройки ]
* [https://www.newalive.net/190-upravlenie-vneshnimi-bazami-dannyh-cherez-phpmyadmin.html PhpMyAdmin]
<hr>
* [http://gahcep.github.io/blog/2013/03/11/linux-mysql-setup/ Правильная установка и настройка MySQL]
* [https://www.hostcms.ru/documentation/server/mysql/ Настройка MySQL]
* [http://linux.mixed-spb.ru/databases/mysql_setup.php Установка и первоначальная настройка MySQL в linux]
* [http://linux.cpms.ru/?p=180 Руководство по MySQL для начинающих]
* [http://cruw.blogspot.ru/2011/11/mysql.html Установка и настройка MySql]
* [https://firstwiki.ru/index.php/%D0%9A%D0%B0%D0%BA_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C_%D0%B4%D0%B0%D0%BC%D0%BF_MySQL_%D0%B1%D0%B0%D0%B7%D1%8B_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C Как загрузить дамп MySQL базы через консоль]
* [https://habr.com/post/105954/ MySQL шпаргалки]
* [https://www.newalive.net/190-upravlenie-vneshnimi-bazami-dannyh-cherez-phpmyadmin.html Управление внешними базами данных через phpMyAdmin]
* [https://geeksmagazine.org/post/7/kak-sozdat-polzovatelya-i-dat-emu-prava-v-mysql Как создать пользователя и дать ему права в MySQL]
* [https://andy-blog.ru/kak-sozdat-novogo-polzovatelya-mysql Как создать нового пользователя MySQL и настроить права доступа ]
* [https://ruhighload.com/%D0%9A%D0%B0%D0%BA+%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C+mysql+master-slave+%D1%80%D0%B5%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8E%3F Как настроить MySQL Master-Slave репликацию?]
* [https://server-gu.ru/mysql-replication-master-slave/ Настройка репликации MySQL MASTER SLAVE]
* [http://blog.anthonyaxenov.ru/2018/10/15/%D1%88%D0%BF%D0%B0%D1%80%D0%B3%D0%B0%D0%BB%D0%BA%D0%B0-master-slave-%D1%80%D0%B5%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F-mysql-5-7/ Шпаргалка: Master-slave репликация MySQL 5.7]


module.exports = function () {
'''ПОЛЕЗНОЕ:'''
this.name = 'Foo';   
<hr>
this.bar = new
* [https://www.8host.com/blog/replikaciya-baz-dannyx-mysql-po-tipu-master-slave/ Репликация баз данных MySQL по типу Master/Slave]
lib.a.c.Bar(); };
 
 
 
Bar.js
 
module.exports = function () { this.name = 'Bar'; };
 
 
 
LazyLoader.js
 
var fs = require('fs');
var path = require('path'); 
function getter(key, dir,file) {
  delete this[key];
  var fullPath = path.join(dir, file);
    try
{require.resolve(fullPath);}
    catch (e) {
                if
            (fs.existsSync(fullPath)) {
                  this[key] = new LazyLoader(path.join(dir, file));
                }       
    return this[key];
    }   
  this[key] = require(fullPath);   
    return this[key]; } 
function LazyLoader(dir) {
      var loader = this;
      if (!fs.existsSync(dir)) {
        return;
    }
  fs.readdirSync(dir).forEach(function(file) {
        var key = file.replace(/\.js$/, '');
        loader.__defineGetter__(key, getter.bind(loader, key, dir, file))
    }); } 
module.exports = LazyLoader; 
 
 
 
При запуске node index.js в консоли распечатается (как и ожидалось)
 
Foo Bar
 
 
 
В данном примере я использовал глобальную переменную lib. Если вы противник
глобальных переменных (или вы просто разрабатываете отдельный публичный модуль)
— то можно отказаться от глобальной переменной — в Foo.js придется написать,
например, так:
 
var path = require('path');
var LazyLoader = require('../../LazyLoader');
var lib = new LazyLoader(path.join(__dirname, '../../'));
module.exports = function() {
    this.name = 'Foo';
    this.bar = new lib.a.c.Bar();
};
 
 
И если у вас всего 1-2 подключаемых файла, то возможно данный подход покажется
вам неуместным, но при большем количестве — вы должны ощутить существенное
облегчение.
Кроме того вы можете сохранять ссылки на директории для сокрашения записи,
например:
 
var lib = new LazyLoader(__dirname);
var logLig = lib.dir1.dir2.dir3.log;
var f1 = new logLib.ConsoleLogger();
var f2 = new logLib.FileLogger(); // вместо //
var f1 = new lib.dir1.dir2.dir3.log.ConsoleLogger(); //
var f2 = new lib.dir1.dir2.dir3.log.FileLogger();  //  и вместо //
var f1 = new require(__dirname + '/dir1/dir2/dir3/log/ConsoleLogger)(); //
var f2 = new require(__dirname + '/dir1/dir2/dir3/log/FileLogger)();
 
 
 
 
'''Заключение'''
 
1. Указанный подход позволяет имитировать аналог '''namespace''' в других языках.
 
2. Приведенный в примере '''LazyLoader''' легко расширить для работы с несколькими
директориями, например, для смешвания или переопределения модулей:
 
var lib = new LazyLoader('globalLibDir', 'applicationSpecificLibDir');
 
 
 
3. Если Вы нашли неточности, опечатки или у вас есть альтернативные решения
подключения модулей — пишите в ЛС.
 
ссылка на оригинал статьи http://habrahabr.ru/post/164665/
 
[http://savepearlharbor.com/?p=164665 взято тут...]

Версия от 03:46, 5 мая 2020

Help MySql

  • Список пользователей:
SELECT USER from mysql.user;
  • Создание пользователя:
CREATE USER 'user'@'localhost' IDENTIFIED BY 'secret';
  • Удаление пользователя:
DROP USER user@localhost;
  • Предоставить права пользователю:
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost';
  • Предоставить супер права пользователю:
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost' WITH GRANT OPTION;
  • Права равные root для работы через phpmyadmin
GRANT ALL PRIVILEGES ON  *.* TO 'user'@'%' REQUIRE NONE WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

Настройка PhpMyAdmin

Процедура «переподключения» phpMyAdmin на работу с внешним сервером достаточно проста, но вызывает вопросы у тех, кто занимается всем этим недавно или неглубоко.

В данной статье мы рассмотрим несколько вариантов подключения phpMyAdmin ко внешнему серверу, так как задачи и условия у всех разные. В примере я использую сервер баз данных MariaDB, ОС Ubuntu и phpMyAdmin версии 4.5.4, что практически не важно, так как всё достаточно просто. PhpMyAdmin установлен на домашний ПК, но с тем же успехом он может быть настроен и на удалённом сервере. Имеется ввиду, что всё прикладное ПО, такое как непосредственно сам сервер БД, http-сервер и php у вас уже установлено.

  • Пример первый (доступ с паролем).

Сервер баз данных расположен на машине с адресом 10.10.1.10. PhpMyAdmin устанавливаем на локальный ПК с адресом 10.10.1.20. Необходимо убедиться, что сервер баз данных принимает внешние соединения. Правим my.cnf (/etc/mysql/my.cnf). В строке bind-address по умолчанию указан адрес 127.0.0.1, что запрещает серверу принимать внешние соединения. Заменяем его на 0.0.0.0, что разрешит внешние соединения с любого адреса. В целях безопасности лучше уточнить адрес, если вы не планируете подключаться к серверу из разных источников. В этом примере будет использоваться строка следующего вида:

bind-address		= 10.10.1.20

Сохраняем и перезагружаем.

sudo service mysql restart

На ПК (или другой удалённый сервер) устанавливаем phpMyAdmin.

sudo apt install phpmyadmin

В процессе установки отказываемся от конфигурации (конфигурировать нечего; сервер баз данных на удалённой машине).

Далее правим конфигурационный файл phpMyAdmin config.inc.php (/etc/phpmyadmin/config.inc.php). Если это была свежая установка и на локальном хосте нет сервера баз данных, то удаляем все строки (кроме первой «<?php») и пишем следующее:

/* External Server #1 */
 $i++;
 $cfg['Servers'][$i]['verbose'] = 'Server Name';
 $cfg['Servers'][$i]['host'] = '10.10.1.10';
 $cfg['Servers'][$i]['connect_type'] = 'tcp';
 $cfg['Servers'][$i]['extension'] = 'mysqli';
 $cfg['Servers'][$i]['auth_type'] = 'cookie';
 $cfg['Servers'][$i]['AllowNoPassword'] = false;

Вместо Server Name вписываем что угодно. Сохраняем и закрываем файл.

Конвертирование базы из postgresql в mysql

git clone https://github.com/ChrisLundquist/pg2mysql.git 
cd pg2mysql
  • сохраняем дамп из postgresql (пример сохранение всех таблиц для wordpress - wp*)
sudo -u postgres pg_dump --quote-all-identifiers --no-acl --no-owner --table=wp_* --format p --data-only wordpress -f wordpress_pgsql.sql
  • конвертируем в формат mysql
php pg2mysql_cli.php worpress_pgsql.sql wordpress_mysql.sql
  • теперь необходимо заменить все таблицы с `"public"."wp_*"` на 'wp_*` это можно сделать в редакторе по F4
  • не забудьте исправить "` ( на '(
  • теперь меняем sql команду с INSERT на REPLACE так же по F4
  • все, дамп можно заливать в базу, предварительно создайте из wordpress начальную структуру таблиц через install и потом вносите данные.


ИСТОЧНИКИ



ПОЛЕЗНОЕ: