Путем установки тайм-аута на сокете, socket.connect_ex()
становится неблокирование операция. Именно поэтому Вы добираетесь EAGAIN
и EALREADY
, ошибки при вызове connect_ex()
неоднократно в цикл - EAGAIN
на первом вызове указывают, что соединение не может быть сразу завершено и происходит в фоновом режиме, и затем EALREADY
на последующих вызовах указывает, что существующее соединение все еще происходит и еще не завершилось.
Ваш цикл просто работает, пока соединение наконец не заканчивается успешностью или неуспешностью, неважно, сколько времени это берет. Тайм-аут сокета, который Вы устанавливаете, не играет в ту логику.
, Чтобы сделать, что Вы просите, выполняет Ваш собственный таймер параллельно к циклу соединения и затем закрывают сокет, если таймер протекает прежде socket.connect_ex()
возвраты его конечный результат.
, С другой стороны, избавляются от цикла в целом.
Вызов socket.connect_ex()
одно время, и если это возвращается EAGAIN
затем использование select.select()
для ожидания соединения для завершения. Это имеет timeout
параметр. Сокет TCP введет перезаписываемое состояние, если незаконченная попытка подключения успешно соединится с сервером. Если select()
испытывает таймаут или сообщает об ошибке, закройте сокет вместо этого.
Или, попытайтесь использовать socket.create_connection()
, который также имеет timeout
параметр.
Navicat может сделать это за вас. Он также синхронизирует схему и / или данные между двумя экземплярами базы данных mysql. Я успешно использовал его в прошлом.
http://www.navicat.com/en/products/navicat_mysql/mysql_overview.html
Здесь есть скриншот инструмента синхронизации данных и структуры:
http://www.navicat.com/en/products/navicat_mysql/mysql_detail_mac.html#7
Я использую SQLyog:
Это не бесплатно, но это очень хороший инструмент, который многократно сэкономил стоимость лицензии. Я никоим образом не связан с компанией, а просто использую ряд инструментов MySQL.
Бесплатная пробная версия (30 дней) доступна по адресу здесь .
Лучшее что нужно сделать, это попробовать некоторые тесты производительности, которые уже существуют. Всегда лучше использовать проверенные тесты, если вы полностью не уверены, что ваши данные и загрузка базы данных будут значительно отличаться от традиционных шаблонов использования (но тогда для чего вы используете базу данных?). Я собираюсь украсть мой собственный ответ от ServerFault :
Существует большое количество тестов там для другой базы данных MySQL двигатели. Есть приличный сравнение MyISAM, InnoDB и Falcon на производительность Percona MySQL Блог , см. здесь .
Еще одна вещь, которую следует учитывать между два вышеупомянутых движка (MyISAM и InnoDB) - их подходы к блокировка. MyISAM выполняет блокировка таблицы, в то время как InnoDB выполняет блокировка строк. Есть множество вещи для рассмотрения, не только прямо показатели производительности.
Возможно, немного поздно для вечеринки, но я только что написал простой инструмент на PHP для сравнения схем базы данных MySQL:
PHP-скрипт для сравнения схем базы данных MySQL
Он экспортирует схему и сериализует ее перед сравнением. Это позволяет сравнивать базы данных, которые находятся на разных хостах (где оба хоста могут быть недоступны для PHP-скрипта).
Изменить: