Как настроить репликацию MySQL на CentOS. Mysql centos 7 настройка


Mysql-Proxy: Установка и настройка на CentOS7

Балансировка mysql запросов - важная вещь, если мы используете несколько mysql серверов. Если у Вас настроена master-slave репликация баз даных, то есть смысл распределить нагрузку на несколько серверов. Отправлять update, insert запросы на master сервер, а select запросы распределять между двумя, тремя и более серверами.

Для этого можно воспользоваться утилитой mysql-proxy. К сожалению довольно мало документации на эту тему присутствует на просторах интернета. Нужно устранить эту брешь.

Итак, для начала нам понадобится glib последней версии. Все действия я проводил на CentOS7.

Скачиваем исходник и распаковываем его:

wget http://ftp.gnome.org/pub/gnome/sources/glib/2.42/glib-2.42.0.tar.xztar xvf glib-2.42.0.tar.xz

В случае проблем с распаковкой - усановите xz-utils или просто пакет xz и посторите операцию.

Следующие пакеты нужны будут для выполнения правильной сборки:

yum install lua lua-devel libevent libevent-devel glib2 glib2-devel pkg-config mysqlclient14-devel libffi mysql libffi-devel zlib zlib-devel gcc gettext-devel glibc glibc-devel

Теперь переходим в папку glib и устанавливаем его:

cd glib-2.42.0./configuremakemake install

В ходе выполнения появится вот такое сообщение:

Libraries have been installed in: /usr/local/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf'

Соответсвенно библиотеки лягли в /usr/local/lib/

Для того что бы система их увидела, я сделал симлинки, создав резервные копии оригиальных файлов:

mv /usr/lib64/libglib-2.0.so.0 /usr/lib64/libglib-2.0.so.0.bakmv /usr/lib64/libglib-2.0.so /usr/lib64/libglib-2.0.so.bak

ln -s /usr/local/lib/libglib-2.0.so.0.4200.0 /usr/lib64/libglib-2.0.so.0ln -s /usr/local/lib/libglib-2.0.so.0.4200.0 /usr/lib64/libglib-2.0.so

Теперь можно переходить к установке mysql-proxy. Говорят, что он когда-то был доступен в репозитарии Epel. К сожалению я его там не нашел. Поэтому скачиваем готовый пакет и устанавливаем его:

wget ftp://195.220.108.108/linux/fedora/linux/releases/22/Everything/x86_64/os/Packages/m/mysql-proxy-0.8.5-1.fc22.x86_64.rpmrpm -ihv mysql-proxy-0.8.5-1.fc22.x86_64.rpm

Также понадобится оригинальный пакет с исходниками из-за дополнительного скрипта. Скачиваем его и распаковываем:

wget http://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gztar xf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz

Чудо скрипт, который будет разделять read и write запросы, нужно скопировать в папку к mysql-proxy:

cp share/doc/mysql-proxy/rw-splitting.lua /usr/lib64/mysql-proxy/lua/proxy/

Узнаем расположение конфиг файла вот ткой командой:

rpm -qc mysql-proxy

В моем случае это /etc/sysconfig/mysql-proxy. В любимом редактора открываем этот файл для редактирования и устанавливаем пароль для админа (ADMIN_PASSWORD) - он не должен быть пустым.

PROXY_OPTIONS приводим к следующему виду:

PROXY_OPTIONS="--log-level=info \--proxy-address=:3306 \--log-use-syslog \--plugins=proxy \--plugins=admin \--proxy-backend-addresses=192.168.1.143:3306 \--proxy-read-only-backend-addresses=192.168.1.132 \--proxy-lua-script=/usr/lib64/mysql-proxy/lua/proxy/rw-splitting.lua"

proxy-backend-addresses - адрес master сервера, на который будут отправляться insert и update запросы.proxy-read-only-backend-addresses - адрес сервера, на который будут уходить только select запросы.proxy-address - определяет ip адрес и порт, на котором будут обрабатываться входящие соединения. По умолчанию 4040

Создаем симлинки:

cd /usr/lib64ln -s /opt/mysql-proxy/lib/libmysql-chassis.so.0.0.0 libmysql-chassis.so.0ln -s /opt/mysql-proxy/lib/libmysql-proxy.so.0.0.0 libmysql-proxy.so.0ln -s /opt/mysql-proxy/lib/libmysql-chassis-glibext.so.0.0.0 libmysql-chassis-glibext.so.0ln -s /opt/mysql-proxy/lib/libevent-2.0.so.5.1.9 libevent-2.0.so.5ln -s /opt/mysql-proxy/lib/libmysql-chassis-timing.so.0.0.0 libmysql-chassis-timing.so.0

Теперь можно запускать:

/etc/init.d/mysql-proxy start

Для того что бы проверть состояние кластера подключитесь к админке:

mysql -hlocalhost -P4041 -uadmin -ppassword

Для отображения всех бэкэндов выполните следующий запрос:

SELECT * FROM backends;

В результате получаем табличку:

+-------------+--------------------+---------+------+------+-------------------+ | backend_ndx | address | state | type | uuid | connected_clients | +-------------+--------------------+---------+------+------+-------------------+ | 1 | 192.168.1.143:3306 | unknown | rw | NULL | 0 | | 2 | 192.168.1.132:3306 | unknown | ro | NULL | 0 | +-------------+--------------------+---------+------+------+-------------------+

При написании получал вдохновление с этой и этой статей.

(Visited 1 925 times, 1 visits today)

www.tech-notes.net

Как настроить репликацию MySQL на CentOS

Он так долго об этом размышлял, что уже начал это проповедовать (М. Пруст).

На этом уроке мы покажем вам, как настроить основную репликацию MySQL на двух серверах CentOS 7, но те же самые шаги должны работать на всех системах на основе RPM. Мы будем использовать два тестовых CentOS 7 виртуальных сервера для этого урока со следующими IP – адресами:

MASTER: 192.168.1.2  SLAVE: 192.168.1.3

Мастер-сервер:

Вход на мастер-сервер в качестве пользователя root

ssh root@IP_Address

 

и установить сервер MySQL, если он еще не установлен

yum install mysql-server mysql

 

Запустите сервер MySQL и добавьте его в автозагрузку

systemctl start mysql systemctl enable mysql

 

Затем откройте файл конфигурации MySQL с помощью текстового редактора и добавьте следующие строки в файл

vi /etc/my.cnf

 

server-id = 1 binlog-do-db=database relay-log = mysql-relay-bin relay-log-index = mysql-relay-bin.index log-bin = mysql-bin

 

Не забудьте заменить ” database” на фактическое имя базы данных, которую вы хотите скопировать на подчиненный сервер.

Сохраните файл конфигурации и перезапустите сервер MySQL для того, чтобы изменения вступили в силу

systemctl restart mysql

 

Войдите на сервер MySQL в качестве пользователя root и создайте пользователя, который будет использоваться ведомым сервером

mysql -u root -p

 

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'%' IDENTIFIED BY 'PASSWORD' mysql> FLUSH PRIVILEGES; mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 245 | database | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) mysql> exit

 

 

Нам потребуются координаты master, которые собираются использовать для подчиненного сервера, поэтому запишите их.

Файл: MySQL-bin.000001 Позиция: 245

Заменить ‘ PASSWORD ‘ с фактическим сильным паролем.

Теперь, если база данных, которую вы хотите перенести, является не пустой, создайте дамп из базы данных

mysqldump -u root -p --master-data database > /root/database.sql

 

и передайте файл дампа подчиненному серверу

rsync -Waq -e ssh /root/database.sql 192.168.1.3:/root

 

Подчиненный сервер:

Следующий шаг заключается в настройке подчиненного сервера. Вход на подчиненный сервер через SSH в качестве пользователя root и установите сервер MySQL, как мы делали на главном сервере.

После установки и запуска сервера MySQL, откройте конфигурационный файл и добавьте следующие строки:

vi /etc/my.cnf

 

server-id = 2 master-host=191.168.1.2 master-connect-retry=60 master-user=slaveuser master-password=PASSWORD replicate-do-db=database relay-log = mysql-relay-bin log-bin = mysql-bin

 

Сохраните файл и перезапустите сервер MySQL после изменения, чтобы настройки обновились.

systemctl restart mysql

 

Импортируйте файл дампа MySQL, который мы создали на главном сервере

mysql -u root -p < /root/database.sql

 

Вход в MySQL как пользователь root, остановить slave и настройте его

mysql -u root -p

 

mysql> slave stop; mysql> CHANGE MASTER TO MASTER_HOST='123.456.789.1', MASTER_USER='slaveuser', MASTER_PASSWORD='PASSWORD', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=245; mysql> slave start;

 

Используйте имя пользователя MySQL и пароль, который мы создали на главном сервере.

Вы можете проверить состояние ведомого устройства, выполнив следующую команду MySQL:

mysql> show slave status;

 

*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 123.456.789.1 Master_User: slaveuser Master_Port: 3306 Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: database

 

Если “Slave_IO_State” сообщает “Ожидание master, чтобы отправить событие’, репликация успешно.

Вот и все. Это так просто. Если вам нужна дополнительная информация о том, как настроить конфигурацию мастер репликации вы можете найти его на официальном сайте MySQL.

PS. Если вам понравился этот пост, пожалуйста, поделитесь им с друзьями в социальных сетях с помощью кнопок на левой стороне поста или просто оставьте комментарий ниже. Заранее благодарю.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 84

Если статья понравилась, то поделитесь ей в социальных сетях:

andreyex.ru

Установка Apache, MySQL, PHP на CentOS 7

Установка Apache, MySQL / MariaDB, PHP (LAMP) на CentOS 7

Стек LAMP используется для обозначения группы бесплатного программного обеспечения со свободным исходным кодом, который обычно устанавливается вместе на для того, чтобы получить сервер динамических веб-приложений и веб-сайтов. На самом деле этот термин представляет собой ОС Linux с веб-сервером Apache, при этом данные сайта хранятся в базе данных MySQL (с использованием MariaDB), а динамический контент обрабатывается PHP.

В данной статье мы рассмотрим возможность установки описанного выше ПО на CentOS 7, используя стандартный менеджер пакетов — yum. Для этого нам потребуются данные (логин и пароль) root, а при удаленной установке и доступ по SSH.

Установка Apache

Это самый популярный на данный момент веб-сервер, поэтому это «выбор по умолчанию» для размещения практически любого веб-сайта.  Для установки выполним следующую команду:

yum -y install httpd

При выполнении операций под обычным пользователем, для корректного выполнения операции стоит в начало строки добавить sudo. Параметр «-y» автоматически подтвердит продолжение (загрузку пакетов) установки.

После завершения установки запустим Apache:

systemctl start httpd.service

Выполнить проверку работы свежеустановленного веб-сервера можно уже сейчас, набрав IP адрес вашего сервера в браузере.

http://IP_address_вашего_сервера/

systemctl status httpd — также отображает статус указанного сервиса

Вы увидите следующую приветственную картинку:

Если вы видите эту картинку, значит сервер работает корректно. Далее выполним добавление службы веб-сервера в автоматический старт при загрузке системы:

systemctl enable httpd.service

Теперь, когда вы имеете установленный веб-сервер, перейдем к следующему шагу — редактирование системного брандмауэра:

firewall-cmd --zone=public --add-port=80/tcp --permanent

 firewall-cmd --reload

Установка MySQL / MariaDB

В последний (на данный момент) версии CentOS 7 разработчики отказались от использования MySQL и перешли на бесплатно распространяемый сервер баз данных — MaridDB (от разработчиков MySQL, поэтому API и синтаксис тот же). Установка аналогична, выполняется следующим образом:

yum -y install mariadb-server mariadb

Запускаем сервер БД:

systemctl start mariadb

После старта данной программы, необходимо произвести настройку MariaDB, повышающую безопасность и отказоустойчивость данного ПО:

mysql_secure_installation

В данных операциях мы заменяем пустой пароль root к серверу БД, а также удаляем тестовые и пустые базы, убираем анонимных пользователей и т.п. По окончанию данных операций — добавим сервер БД в автозагрузку:

systemctl enable mariadb.service

Установка PHP

PHP является основной компонентой, которая отвечает за обработку кода для динамического контента. Под этим подразумевается обработка скриптов, подключение и взаимодействие с MySQL, передача данных на веб-сервер. Установка выполняется также через менеджер пакетов yum:

yum install php php-mysql

После этого необходимо перезапустить веб-сервер, чтобы он начал корректно работать с PHP:

systemctl restart httpd.service

Установка дополнительных модулей:

yum search php-

yum -y install php-fpm php php-pear php-process

После успешной установки пакетов проверим работу PHP на нашем

www.gotoadm.ru

Оптимизация MySQL — Альтернативный взгляд Salik.biz

Подробное руководство по настройки и оптимизации веб сервера

Вам необходимо настроить все непосредственно под параметры Вашего сервера Зайти туда можно двумя способами:1. Через SSH:

# nano /etc/my.cnf2. В панели Веста:Сервер => mariadb => CONFIGURE => ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ

Теперь разберём параметры:

symbolic-links=0 Из соображений безопасности рекомендуется отключить использование

skip-name-resolve Если процесс установления DNS очень медленный и хостов очень много, то можно получить более высокую производительность либо

skip-external-locking путем блокировки поиска DNS при помощи опция установлена по умолчанию, начиная с версии 4. Указывает MySQL-серверу не использовать внешние блокировки при работе с базой. Внешние блокировки необходимы в ситуациях, когда несколько серверов работают с одними и теми же файлами данных, т.е. имеют одинаковую datadir, что на практике не используется.

query_cache_type = 1 Варианты типа кэширования: 0 — кэш отключен 1 — кэшировать все запросы, кроме запросов содержащих SELECT S_NO_CACHE 2 — кэшировать только запросы, содержащие SELECT S_NO_CACHE

max_join_size = 65000000 В идеале хватит 1000000, но для моих потребностей необходимо побольше (максимальный размер анализируемых данных через оператор SELECT. Стандартно более 4 миллиардов). з.ы. Так сказать этот параметр защищает от кривых программиста

key_buffer_size = 2048M Размер буфера, используемого для блоков индексов (рекомендуется 25% от ОЗУ) является общим для всех потоков.

key_buffer = 2048M Не ставьте больше чем 1/3 озу и не больше объема всех б.д.

max_allowed_packet = 32M Максимальный размер пакета с запросом, принимаемого сервером

table_open_cache = 50000 Количество открытых таблиц для всех потоков (зависит от кол-во таблиц, лучше ставить больше)

sort_buffer_size = 4M Поток, которому необходимо произвести сортировку, выделяет буфер данного размера (можно больше с оглядкой на расход памяти)read_buffer_size = 16M рекомендуется в 4-е раза больше, чем sort_buffer_size

read_rnd_buffer_size = 8M Размер буфера, выделяемого для чтения строк после сортировки, что-бы избежать повторного поиска на диске. Увеличение значения данной переменной может существенно увеличить эффективность конструкции ORDER BY. Имейте в виду, так как данный буфер выделяется для каждого клиента, не следует устанавливать чересчур большое значение.

myisam_sort_buffer_size = 512M Размер буфера выделяемого для сортировки MyISAM индексов с помощью оператора REPAIR TABLE или при создании индексов операторами CREATE TABLE, ALTER TABLE:

thread_cache_size = 128 Размер кэша потоков для предотвращения их повторного создания.

query_cache_size = 800M сколько памяти выделить для внутреннего кэша запросов mysql, вычисляется опытным путем, по фактическому потреблению, рекомендуется указывать 20% — 10% от ОЗУ

thread_concurrency = 16 число одновременно работающих потоков, рекомендуется ставить 2 * количество CPU + количество дисков.

thread_stack = 512K Размер стека для каждого потока (демона)

table_cache = 2048 Число кэшируемых потоков. После обработки запроса сервер не будет завершать поток, а разместит его в кэше, если число потоков, находящих в кэше меньше, чем указанное значение

max_sort_length = 512 Указывает, сколько байт из начала полей типа BLOB или TEXT использовать при сортировке. Значение по умолчанию 1024, если вы опасаетесь некорректно спроектированных таблиц или запросов, то следует его уменьшить

query_cache_limit = 2048M Максимальный размер кэшируемого запроса

max_connect_errors = 1000000 Задает максимально количество неудачных попыток подключения с хоста. Значение по-умолчанию 10. При достижении данного значения, хост блокируется.

max_heap_table_size = 2048M максимальный допустимый размер таблицы, хранящейся в памяти (типа MEMORY). Значение по умолчанию 16 МБ, если вы не используете MEMORY таблиц, то установите это значение равным tmp_table_size.

tmp_table_size = 2048M максимальный размер памяти, выделяемой для временных таблиц, создаваемых MySQL для своих внутренних нужд. Это значение также ограничивается переменной max_heap_table_size, поэтому в итоге будет выбрано минимальное значение из max_heap_table_size и tmp_table_size, а остальные временные таблицы будут создаваться на диске.

tmp_table_size = 2048M Если размер временной таблицы превышает размер, установленный этой переменной, она сбрасывается на диск. При наличии достаточного количества памяти на сервере, рекомендуется повысить значение данной переменной, по ускорения запросов с конструкцией GROUP BY

join_buffer_size = 1024M Размер буфера использующегося при операциях объединения таблиц ( если не используются индексы ). Буфер устанавливается один раз во время каждой операции объединения

open_files_limit = 150000 Лучше больше

table_definition_cache = 2048 Переменная задает количество идентификаторов, которые могут храниться в кэше определений. При использовании большого количества таблиц, имеет смысл увеличить значение данной переменной для повышения производительности.

net_buffer_length = 1024 Объем памяти, выделяемый для буфера соединения и для буфера результатов на каждый поток. Буфер соединения будет указанного размера и буфер результатов будет такого же размера, т.е. на каждый поток будет выделен двойной размер net_buffer_length. Указанное значение является начальным и при необходимости буферы будут увеличиваться вплоть до max_allowed_packet. Размер по умолчанию 16 КБ. В случае ограниченной памяти или использования только небольших запросов значение можно уменьшить. В случае же постоянного использования больших запросов и достаточного объема памяти, значение стоит увеличить до предполагаемого среднего размера запроса.

max_connections = 15000 Максимально количество соединений клиентов с сервером.

max_user_connections = 200 Максимальное число одновременных подключений для одной учетной записи MySQL. Значение по-умолчанию 0, отсутствие каких-либо ограничений.

wait_timeout = 60 Время ожидания блокировки таблицы. Значение по-умолчанию — 50 секунд

interactive_timeout = 60 Интервал времени в секундах, в течение которых сервер ожидает активности на интерактивном соединении, до его закрытия.

long_query_time = 5 если запрос выполняется дольше указанного времени (в секундах), то он будет считаться «медленным».

innodb-flush-method = O_DIRECT Отключает двойную буферизацию (самим mysql и ОС).

innodb_file_per_table = 1 Для возможности использования Backup базы с помощью snapshot'ов (Linux, LVM) в ОС LINUX.

innodb_buffer_pool_size = 6144M Размер буфера под все нужды, он должен составлять порядка 70-80 % от общей памяти сервера БД.

innodb_additional_mem_pool_size = 128M Размер памяти, выделяемый InnoDB для хранения различных внутренних структур. Если InnoDB будет недостаточно этой памяти, то будет запрошена память у ОС и записано предупреждение в лог ошибок MySQL.

innodb_file_io_threads = 8 Количество потоков ввода/вывода файлов в InnoDB. Обычно этому параметру присваивается значение 4.

innodb_lock_wait_timeout = 50 Время простоя (в секундах), на протяжении которого транзакция InnoDB может ожидать прекращения блокировки прежде, чем будет произведен откат.

innodb_buffer_pool_instances = 6 По умолчанию InnoDB использует для Buffer Pool один инстанс. При этом есть возможность выделить несколько блоков — и работает с ними MySQL в InnoDB в ряде случаев гораздо эффективнее. Это связанно с меньшими блокировками кеша при записи данных.

innodb_thread_concurrency = 16 Должно совпадать с thread_concurrency; число одновременно работающих потоков, рекомендуется ставить 2 * количество CPU + количество дисков.

innodb_flush_log_at_trx_commit = 2 Значение «1» означает, что любая завершенная транзакция будет синхронно сбрасывать лог на диск. Это вариант по умолчанию, он является самым надежным с точки зрения сохранности данных, но самым медленным по скорости работы. Значение «2» делает то же самое, только сбрасывает лог не на диск, а в кеш операционной системы (т.е. не происходит flush после каждой операции). Это значение подойдет в большинстве случаев, т.к. не выполняет дорогой операции записи после каждой транзакции. При этом лог пишется на диск с задержкой в несколько секунд, что весьма безопасно с точки зрения сохранности данных. Но у нас кластер и в случае краха, данные все равно будут переданы с донора. Главное что бы транзакция закомитилась на других нодах. Тогда данные мы получим при SST.

Я тот, кого называют Дирижёром Тишины мелодий смерти…

salik.biz