Главная
Главная Руководства FreeBSD › FreeBSD, ставим MySQL 5.6



Автор:

Статья опубликована: 2015-05-05 15:51:16
Последние правки: 2017-09-02 23:25:04

Без сервера баз данных нынче обойтись нельзя. Ставим и настраиваем MySQL 5.6.

  • Исходные данные
    # uname -sr
    FreeBSD 10.1-RELEASE-p9
    # pkg info | grep mysql
    mysql56-client-5.6.24          Multithreaded SQL database (client)
    mysql56-server-5.6.24          Multithreaded SQL database (server)
    

  • Подготовка
    Проверяем наличие или добавляем строки в /etc/make.conf:
    PORTSDIR?=/usr/ports
    
    .if ${.CURDIR} == ${PORTSDIR}/databases/mysql56-*
    WITH_PROC_SCOPE_PTH=yes
    BUILD_OPTIMIZED=yes
    BUILD_STATIC=yes
    .endif
    

  • Установка
    # cd /usr/ports/databases/mysql56-server
    # make install clean
    

  • Обновление
    Если у вас уже стоял MySQL вы ставите новую версию взамен предыдущей, то необходимо остановить MySQL сервер и выполнить mysql_upgrade:
    # /usr/local/etc/rc.d/mysql-server stop
    # mysqld --skip-grant-tables &
    # mysql_upgrade
    

  • Настройка
    Проверяем наличие или добавляем строку в /etc/rc.conf:
    mysql_enable="YES"
    
    Создаем конфигурационный файл /var/db/mysql/my.cnf с настройками
    # cd /var/db/mysql
    # touch my.cnf
    # chown mysql:mysql my.cnf
    # chmod 0660 my.cnf
    
    Записываем в /var/db/mysql/my.cnf:
    [mysqld]
    skip-networking
    character-set-server=utf8
    init-connect="SET NAMES utf8"
    query_cache_size=64M
    long_query_time=5
    slow_query_log=1
    slow_query_log_file=/var/db/mysql/slow.log
    
    [client]
    character_set_client=utf8
    
    Описание:
    • skip-networking - отключаем сетевую подсистему, доступ к серверу в этом случае возможен только через сокет
    • character-set-server=utf8, init-connect="SET NAMES utf8" - задаем использование сервером кодировки utf8
    • character_set_client=utf8 - задаем использование клиентом кодировки utf8
    • long_query_time=5
      slow_query_log=1
      slow_query_log_file=/var/db/mysql/slow.log
      эти директивы задают слежение за медленными запросами. Медленным в данном случае считаются запросы, выполняющиеся больше 5 секунд.

    Тем, кто хочет остаться по умолчанию на MYISAM, необходимо в секцию [mysqld] добавить строки:
    default-storage-engine=MYISAM
    
    Создаем начальные базы данных:
    # cd /usr/local
    # ./bin/mysql_install_db
    # chown -R mysql:mysql /var/db/mysql
    
    Запускаем MySQL сервер
    # /usr/local/etc/rc.d/mysql-server start
    
    Проверяем что сервер запустился и работает
    # ps ax | grep mysql
    2132  ??  Is     0:00.01 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --user=mysql --data
     2333  ??  I      0:00.08 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datad
    
    Выполняем скрипт который удаляет тестовую базу, гостевой аккаунт и делает ещё некоторую оптимизацию для повышения безопасности (данный скрипт можно выполнить в любое время позже):
    # mysql_secure_installation
    
    Или просто задаем пароль root для mysql-сервера
    # /usr/local/bin/mysqladmin -uroot password "ПАРОЛЬ"
    
    Пробуем подключиться:
    # mysql -uroot -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 13
    Server version: 5.6.24 Source distribution
    
    Copyright (c) 2000, 2015, 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>
    

  • Логин и пароль в командной строке
    Начиная с версии 5.6, MySQL при явном указании в командной строке логина и пароля через -uUSER -pPASSWORD, появляется вот такое предупреждение:
    Warning: Using a password on the command line interface can be insecure.
    
    Этой строчкой нас, с целью повышения секьюрности, для аутентификации ненавязчиво просят использовать данные из конфигураций, которые может создавать mysql_config_editor.

    Смотрим список конфигураций:
    # mysql_config_editor print --all
    
    Создаем конфигурацию:
    # mysql_config_editor set --login-path=backup --host=localhost --user=localuser --password
    
    --login-path: название конфигурации
    --host: сервер, с которого можно логиниться пользователю
    --user: имя пользователя
    --password: программа попросит ввести пароль

    Удаляем всю конфигурацию:
    # mysql_config_editor remove --login-path=backup
    

  • Работа с MySQL
    Повседневные и не очень операции, которые рано или поздно захочется автоматизировать:

    • Создаем базу данных newdb:
      файл createdb.sql
      create database newdb;
      grant all privileges on newdb.* to 'UserForNewDb'@'localhost' identified by 'PasswordForNewDb';
      
      - UserForNewDb : имя пользователя в MySQL (будет создан автоматически)
      - PasswordForNewDb : пароль

      файл createdb.sh
      #!/bin/sh
      DBNAME='newdb'
      mysql --login-path=backup < createdb.sql
      mysql --login-path=backup $DBNAME < $DBNAME.sql
      
    • Резервное копирование (в том числе и через cron)
      копирование всей базы в один файл:
      #!/bin/sh
      FOLDER='/home/backup'
      DBNAME='newdb'
      
      cd $FOLDER
      
      /usr/local/bin/mysqldump --login-path=backup $DBNAME > $DBNAME.sql
      if [ -s $DBNAME.sql.zip ]
      then
       rm $DBNAME.sql.zip
      fi
      /usr/local/bin/zip $DBNAME.sql.zip $DBNAME.sql
      rm $DBNAME.sql
      
      копирование каждой таблицы в отдельный файл:
      #!/bin/sh
      
      FOLDER='/home/backup'
      DBNAME='newdb'
      
      cd $FOLDER
      mkdir -p $FOLDER/$DBNAME
      
      for TABLE in `/usr/local/bin/mysql --login-path=backup --silent --skip-column-names $DBNAME -e "show tables"`
      do
          /usr/local/bin/mysqldump --login-path=backup --skip-opt $DBNAME $TABLE > $DBNAME/$TABLE.sql
      done
      
      /usr/local/bin/zip -r $DBNAME.zip $DBNAME
      rm -r $DBNAME
      
    • чиним таблицы (для MyISAM):
      #!/bin/sh
      
      DBNAME='newdb'
      
      mysql --login-path=backup --silent --skip-column-names $DBNAME -e "show tables" | awk '{print "repair table `"$1"`;"}' | mysql --login-path=backup $DBNAME