wiki:freebsd:mysql

Установка MySQL 5.5

cd /usr/ports/databases/mysql55-server/
make install clean
rehash

Настраиваем запуск MySQL при старте системы:

echo 'mysql_enable="YES"' >> /etc/rc.conf
cd /usr/local
./bin/mysql_install_db --datadir=/var/db/mysql --user=mysql

3. Создаём файл настроек /var/db/mysql/my.cnf.

ee /var/db/mysql/my.cnf
my.cnf
[client]
character_set_client=utf8
#password = your_password
port = 3306
socket = /tmp/mysql.sock
 
[mysqld]
skip-networking
character-set-server=utf8
init-connect="SET NAMES utf8"
long_query_time=5
slow_query_log=1
slow_query_log_file=/var/db/mysql/slow.log
#port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16M
query_cache_size=64M
max_allowed_packet = 128M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
innodb_flush_log_at_trx_commit=2
skip-innodb_doublewrite
server-id = 1
 
# binlog if need
#expire_logs_days = 10
#max_binlog_size = 512M
#log-bin=mysql-bin
#binlog_format=mixed
 
[mysqldump]
quick
max_allowed_packet = 128M
 
[mysql]
no-auto-rehash
 
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
 
[mysqlhotcopy]
interactive-timeout

Устанавливаем права на каталог с БД:

chown -R mysql:mysql /var/db/mysql

Убеждаемся, что в /etc/newsyslog.conf присутствует

/var/log/mysql.log         600  2     500  *     ZC
/usr/local/etc/rc.d/mysql-server start

и проверяем запустился ли:

ps ax | grep mysql

5. Теперь устанавливаем root пароль для доступа к БД, удаляем анонимного пользователя и тестовую БД:

mysql_secure_installation

Теперь пробуем подключится к БД:

mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 9
Server version: 5.5.31-log Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql>

Убедимся, что БД test удалена:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.01 sec)

mysql> quit
Bye
cd /usr/ports/databases/mysqlbackup
make install clean
rehash

Добавляем в /etc/periodic.conf:

mysqlbackup_enable="YES"
mysqlbackup_args="-a -u root -l 7 -z bzip2"

С такими настройками будут хранится 7 последних архивных копий всех БД в папке бэкапов /var/backups. Для более подробной информации – man mysqlbackup в помощь.

создадим файл /root/.my.cnf с таким содержимым:

[mysql]
user=root
password=ROOTS_PASSWORD_HERE

[client]
user=root
password=ROOTS_PASSWORD_HERE

не забудем:

chmod 600 /root/.my.cnf

Добавляем (или меняем существующие) опции в rc.conf:

mysql_args="--skip-grant-tables --skip-networking"
/usr/local/etc/rc.d/mysql-server restart
mysql -u root
mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

Делаем бакап

mysqldump -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql

Для таблиц InnoDB надо добавлять –single-transaction, это гарантирует целостность данных бекапа. Для таблиц MyISAN это не актуально, ибо они не поддерживают транзакционность.

Создаём структуру базы без данных

mysqldump --no-data - u USER -pPASSWORD DATABASE > /path/to/file/schema.sql

Если нужно сделать дамп только одной или нескольких таблиц

mysqldump -u USER -pPASSWORD DATABASE TABLE1 TABLE2 TABLE3 > /path/to/file/dump_table.sql

Создаём бекап и сразу его архивируем

mysqldump -u USER -pPASSWORD DATABASE | gzip > /path/to/outputfile.sql.gz

Создание бекапа с указанием его даты

mysqldump -u USER -pPASSWORD DATABASE | gzip > `date +/path/to/outputfile.sql.%Y%m%d.%H%M%S.gz`

Заливаем бекап в базу данных

mysql -u USER -pPASSWORD DATABASE < /path/to/dump.sql

Заливаем архив бекапа в базу

gunzip < /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE

или так

zcat /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE

Удобно использовать бекап с дополнительными опциями -Q -c -e, т.е.

mysqldump -Q -c -e -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql

где:

  • -Q оборачивает имена обратными кавычками
  • -c делает полную вставку, включая имена колонок
  • -e делает расширенную вставку.

Итоговый файл получается меньше и делается он чуть быстрее.

Как создать новую базу данных?

mysqladmin -u USER -pPASSWORD create NEWDATABASE

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

mysqlshow -u USER -pPASSWORD

список таблиц базы:

mysqlshow -u USER -pPASSWORD DATABASE

Как посмотреть размер баз данных?

SELECT table_schema "database_name", sum( data_length + index_length )/1024/1024 "Data Base Size in MB" FROM information_schema.TABLES GROUP BY table_schema;

Как записать результат выполнения запроса из MySQL в текстовый файл?

SELECT  *  FROM TABLE_NAME WHERE id=some_id INTO OUTFILE '/path/to/file'

Как узнать какие подсистема хранения данных запущены?

SHOW storage engines;

Решение проблемы

Can't create/write to file '/tmp/

chown root:wheel /tmp
chmod 1777 /tmp

and restart mysql.

  • wiki/freebsd/mysql.txt
  • Последние изменения: 2019/07/24 18:08
  • (внешнее изменение)