Как контролировать последовательное соединение при 250000 бод?

Я пытался прокомментировать, но ответ начинал становиться длинным.

Общая идея, которую мы должны иметь в виду в отношении отношений мастер-мастер в MySQL, заключается в том, что при работе репликации у нас есть два сервера, которые потенциально могут записывать одни и те же записи в одно и то же время или в разное время.

Помня об этом, автоинкремент-смещение должно быть другим - они должны быть 1 и 2 , потому что идея состоит в том, чтобы генерировать разные номера записей (т. Е. Нет конфликты). Таким образом, записи, созданные одним из мастеров, будут четными, а другие - нечетными, и, таким образом, они не могут создать одновременно конфликтующий номер записи. Так, например, первый мастер генерирует записи 1,3,5,7 и так далее, а второй, 2,4,6,8 ...

Что касается идентификатора сервера, они просто имеют быть другим. Традиционно люди используют 1 и 2, но это не является обязательным требованием. Я думаю они не могут быть 0, не уверен.

Наконец, что касается MASTER_LOG_FILE и MASTER_LOG_POS, вы можете попытаться принять значения по умолчанию; однако это никогда не лучшая из идей, предполагающая что-то, и, что более важно, вы можете повторно использовать маршрутизацию, чтобы снова установить отношения мастер-мастер в случае любого события, и поэтому во имя повторного использования кода это будет гораздо полезнее подключиться к удаленному MySQL и получить правильные значения.

Для другой точки зрения на автоматизацию, у вас есть ссылка на страницу модуля Ansible mysql_replication

И вот мой предыдущий ответ, который даст вам подсказку об Ansible Linux, эквивалентном PowerShell " удаленное взаимодействие один-ко-многим

3
01.12.2016, 00:03
1 ответ

Есть несколько недокументированных ioctl, которые вы можете использовать для установки нестандартных скоростей, при условии, что драйвер реализует их. Их можно просто вызвать с помощью небольшого кусочка питона. Например, поместите в файл mysetbaud.py и chmod + x it:

#!/usr/bin/python
# set nonstandard baudrate. http://unix.stackexchange.com/a/327366/119298
import sys,array,fcntl

# from /usr/lib/python2.7/site-packages/serial/serialposix.py
# /usr/include/asm-generic/termbits.h for struct termios2
#  [2]c_cflag [9]c_ispeed [10]c_ospeed
def set_special_baudrate(fd, baudrate):
    TCGETS2 = 0x802C542A
    TCSETS2 = 0x402C542B
    BOTHER = 0o010000
    CBAUD = 0o010017
    buf = array.array('i', [0] * 64) # is 44 really
    fcntl.ioctl(fd, TCGETS2, buf)
    buf[2] &= ~CBAUD
    buf[2] |= BOTHER
    buf[9] = buf[10] = baudrate
    assert(fcntl.ioctl(fd, TCSETS2, buf)==0)
    fcntl.ioctl(fd, TCGETS2, buf)
    if buf[9]!=baudrate or buf[10]!=baudrate:
        print("failed. speed is %d %d" % (buf[9],buf[10]))
        sys.exit(1)

set_special_baudrate(0, int(sys.argv[1]))

Это берет некоторый код из пакета pyserial с константами для различных значений, необходимых из Linux C включает файлы и массив для структуры struct termios2 . Вы используете его с параметром скорости передачи данных и вашим устройством на стандартном вводе, например, из bash:

./mysetbaud.py <>/dev/ttyUSB0 250000
5
27.01.2020, 21:10

Теги

Похожие вопросы