qcloud
V2EX  ›  问与答

mysql 主主同步,数据库 B 报错,麻烦懂的朋友帮一下

  •  
  •   qcloud · Jun 6, 2016 · 2569 views
    This topic created in 3812 days ago, the information mentioned may be changed or developed.
    主主同步配置好之后发现两个数据库没有进行同步,于是我检查了服务器 A ,使用命令: show slave status\G ,一切正常,然后再去看服务器 B ,结果就报错了。所以无法正常同步。请看报错截图,我通过 google 解决了前面一些问题,但这次表示完全懵比。。。。
    https://ooo.0o0.ooo/2016/06/05/5754e38f0d82c.png
    在线等,拜托了。
    Supplement 1  ·  Jun 6, 2016
    23 replies  •  2016-06-06 22:48:00 +08:00
    zeraba
    zeraba
    Jun 6, 2016
    1
    贴下全程的配置方法啊,包括建立 REPLICAITON SLAVE 账号 主从数据库的配置参数
    单看这个报错,只能靠猜了
    hcymk2
    hcymk2
    Jun 6, 2016
    2
    你只同步一个数据库吧。 看下你的配置文件。
    qcloud
    qcloud
    OP
    Jun 6, 2016
    3
    @zeraba
    @hcymk2
    这是服务器 B 的配置文件,是的,只同步一个 data 数据库
    https://ooo.0o0.ooo/2016/06/05/5754edb58c2e2.png
    lytofb
    lytofb
    Jun 6, 2016
    4
    我不是很懂 mysql 的数据库同步,双主同步不会发生脑裂么?
    loading
    loading
    Jun 6, 2016 via Android
    5
    提醒一下:别搞反了。

    某公司这样丢过数据
    qcloud
    qcloud
    OP
    Jun 6, 2016
    6
    @lytofb 不会的
    @loading 多谢提醒
    notgod
    notgod
    Jun 6, 2016❤️2
    7
    上次就回你一次了 又来这逗比问题
    你不要搜索一些古董资料 和中文资料 去 Google 找英文的 使用 search tool 日期选择 最近一个月 一年
    中文资料大部分都扯 按非专业的中文资料操作 能玩到你吐血
    有的一个教程 直接把 mysql3.x 改为 mysql 5.x 就直接发布了

    其次:
    主主同步 99.9%脑裂 不要说不可以
    如果要不脑裂 必须加个中间件

    再次:
    数据库同步 初始数据 必须保持 2 边的 position 绝对一致

    上次回你就已经有
    https://v2ex.com/t/283670#reply2
    语句包含 MASTER_LOG_POS=33421;

    最后:
    这些在 mysql 官方文档中 非常详细
    而且文档的版本 会随着官方的更新而更新
    这种配置一般查看官方文档是最快速最有效

    因为你问别人 别人的系统类型 系统版本 都不一样 mysql 版本也不一样
    产生的配置文件 性能 使用方式 都不一样

    所以建议你打算做什么测试 学习什么 先官方文档过一遍
    然后部署 遇到问题 搜索官方文档一遍 没有的话在官方论坛搜索一遍
    就差不多了解决了
    这里提问并不一定可以解决你的问题

    个人意见 仅供参考
    qcloud
    qcloud
    OP
    Jun 6, 2016
    8
    @notgod 上次那个问题我已经改成了,老兄,目前这个真不好搞,是在下愚昧,麻烦大仙指点迷津。
    qcloud
    qcloud
    OP
    Jun 6, 2016
    9
    qcloud
    qcloud
    OP
    Jun 6, 2016
    10
    @notgod 在线等大神
    notgod
    notgod
    Jun 6, 2016
    11
    你没看我说的?

    position 问题 position 问题 position 问题 position 问题 position 问题


    再次:
    数据库同步 初始数据 必须保持 2 边的 position 绝对一致

    上次回你就已经有
    https://v2ex.com/t/283670#reply2
    语句包含 MASTER_LOG_POS=33421;
    qcloud
    qcloud
    OP
    Jun 6, 2016
    12
    @notgod position 不一致咋办。。。我看了,没看明白那
    BOYPT
    BOYPT
    Jun 6, 2016❤️1
    13
    建议直接上 galeracluster ,否则那些主复制都是不怎么靠谱的。
    notgod
    notgod
    Jun 6, 2016❤️2
    14
    你就不要折腾这个了 直接使用集群

    我直接给你资料好了 以前给客户部署的 任意节点都可以读写
    有些可能有些过时了

    参考资料
    http://matthewcasperson.blogspot.jp/2013/07/setting-up-galera-cluster-in-centos-6.html
    http://blog.laimbock.com/2014/07/08/howto-setup-mariadb-galera-cluster-10-on-centos/comment-page-1/
    https://mariadb.com/kb/en/mariadb/documentation/replication/galera/mariadb-galera-cluster-known-limitations/
    https://mariadb.com/kb/en/mariadb/documentation/replication/galera/galera-cluster-system-variables/#wsrep_replicate_myisam
    http://tecadmin.net/setup-mariadb-galera-cluster-5-5-in-centos-rhel/



    echo "HOSTNAME=dbnode1" >>/etc/sysconfig/network
    hostname "dbnode1"
    echo "HOSTNAME=dbnode2" >>/etc/sysconfig/network
    hostname "dbnode2"

    echo "NETWORKING_IPV6=yes">>/etc/sysconfig/network

    echo "nameserver 74.207.241.5
    nameserver 74.207.242.5
    nameserver 2600:3c01::2
    nameserver 2600:3c01::3
    options rotate">/etc/resolv.conf

    echo -n "
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    2600:3c01::f03c:91ff:fedf:9b24/64 db1
    ">/etc/hosts

    #IP 分配
    DB Node 1 173.255.199.172 / 192.168.183.172
    DB Node 2 198.58.114.176 / 192.168.185.74

    echo "[mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/5.5/centos6-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1">/etc/yum.repos.d/MariaDB.repo

    yum -y install epel-release
    yum -y install socat
    yum erase *mysql*

    yum -y install MariaDB-Galera-server MariaDB-client galera

    /etc/init.d/mysql start
    mysql_secure_installation
    #mysql_upgrade

    mysql -u root -pAa1111111111111
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Aa11111111' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    exit

    service mysql stop

    #### Testing
    mysql -u root -pA111111111

    # Check Status
    show status like 'wsrep%';

    #DB1
    CREATE DATABASE clustertest;
    CREATE TABLE clustertest.mycluster ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), ipaddress VARCHAR(20), PRIMARY KEY(id));
    INSERT INTO clustertest.mycluster (name, ipaddress) VALUES ("db1", "10.0.0.9");
    SELECT * FROM clustertest.mycluster;

    #DB2
    SELECT * FROM clustertest.mycluster;
    INSERT INTO clustertest.mycluster (name, ipaddress) VALUES ("db2", "10.0.0.10");

    show databases;


    MYSQL 数据库 DMM 架构设计
    使用 MariaDB 作为数据库引擎 表使用 InnoDB storage engine.
    可能有部分功能性缺陷 可以参考
    https://mariadb.com/kb/en/mariadb/documentation/replication/galera/mariadb-galera-cluster-known-limitations/

    因为按你们的需求 只能使用多主的架构
    这样可以降低数据库并发的压力 提高写入效率
    如果性能下降 增加数据库节点即可
    所有数据全部都会自动同步 不需要人工干预

    使用方式: 当前 2 节点可用

    准备一个域名
    将域名 DNS 改为 www.dnspod.com 国际站 非国内站

    增加解析记录 (假如 test.com 是你的域名)
    CNAME 记录 一条
    sqlcloud.test.com CNAME 记录 node.test.com
    A 记录 (IPv4 协议)
    node A 记录 default 173.255.199.172
    node A 记录 default 198.58.114.176
    AAAA 记录 (IPv6 协议)
    node AAAA default 2600:3c00::f03c:91ff:fe89:e46
    node AAAA default 2600:3c00::f03c:91ff:fe89:ea9

    TTL 设置为 300 或 600
    default 是 GEO 分流 可以设置一个大洲或者一个国家每服务器

    使用 DNSPOD 国际版 是因为这个支持多记录轮询模式
    例如如果有 1000 个 DNS 请求 DNSPOD 会使用 RR 模式 轮流返回可用 IP
    就是每个 IP 分配 500 个请求,这样实现多数据库服务器写入 提高性能

    然后链接语句

    使用
    sqlcloud.test.com:3306 会随机分配 IP
    root
    1111111111
    数据库名称

    读写数据 都会自动同步在多个节点中

    这个平台可测试可以商用
    插入 10 万条数据 无脑裂问题
    如果有出现 可以增加仲载节点解决

    PS. 已修正 MYSQL 用户表,MYISAM 无法自动同步问题






    C7 文档 2

    systemctl status firewalld

    hostnamectl set-hostname cmsqlnode2 --static

    wsrep_provider=/usr/lib/galera/libgalera_smm.so
    wsrep_cluster_address=gcomm://其他集群 IP
    wsrep_cluster_name='cluster1'
    wsrep_node_address='本机 IP'
    wsrep_node_name='db1'

    ip addr show
    vi /etc/my.cnf.d/server.cnf
    cat /etc/my.cnf.d/server.cnf

    node1
    Server Login:
    IP Address: 1111111111
    Username: root
    Password: 11111111111111

    node2
    IP Address: 11111111111
    Username: root
    Password: 111111111111


    cat >>/etc/sysconfig/network-scripts/ifcfg-eth1 <<EOF
    IPADDR=10.40.211.2
    NETMASK=255.255.255.0
    EOF
    service network restart

    yum erase *mysql*
    yum -y install epel-release
    yum -y install socat

    echo "[mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/10.0/centos7-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1">/etc/yum.repos.d/MariaDB.repo

    echo "[mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/5.5/centos6-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1">/etc/yum.repos.d/MariaDB.repo

    yum -y install net-tools MariaDB-Galera-server MariaDB-client galera

    /etc/init.d/mysql start
    /etc/init.d/mysql restart
    mysql_secure_installation
    #mysql_upgrade

    mysql -u root -pAa111111111111111
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Aa11111111111111' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    exit

    service mysql stop

    #### Testing
    mysql -u root -pAa111111111111

    #### Check Status
    show status like 'wsrep%';


    ######节点测试
    #DB1
    CREATE DATABASE clustertest;
    CREATE TABLE clustertest.mycluster ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), ipaddress VARCHAR(20), PRIMARY KEY(id));
    INSERT INTO clustertest.mycluster (name, ipaddress) VALUES ("db1", "10.0.0.9");
    SELECT * FROM clustertest.mycluster;

    #DB2
    SELECT * FROM clustertest.mycluster;
    INSERT INTO clustertest.mycluster (name, ipaddress) VALUES ("db2", "10.0.0.10");
    show databases;












    配置文件 多个
    #IP 分配
    DB Node 1 173.255.199.172 / 192.168.183.172
    DB Node 2 198.58.114.176 / 192.168.185.74

    DB1
    ============================
    vi /etc/my.cnf.d/server.cnf

    [mysqld]
    wsrep_replicate_myisam=1
    query_cache_size=0
    binlog_format=ROW
    default_storage_engine=innodb
    innodb_autoinc_lock_mode=2
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address=gcomm://192.168.185.74
    wsrep_cluster_name='cluster1'
    wsrep_node_address='192.168.183.172'
    wsrep_node_name='db1'
    wsrep_sst_method=rsync
    wsrep_sst_auth=root:Aa258369
    innodb_doublewrite=1
    innodb_flush_log_at_trx_commit=2

    /etc/init.d/mysql bootstrap


    DB2
    ============================
    vi /etc/my.cnf.d/server.cnf

    wsrep_cluster_address=gcomm://192.168.183.172
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_replicate_myisam=1
    wsrep_sst_method=rsync
    wsrep_sst_auth=root:Aa258369
    wsrep_cluster_name='cluster1'
    wsrep_node_address='192.168.185.74'
    wsrep_node_name='db2'
    wsrep_slave_threads=4

    query_cache_size=0
    binlog_format=ROW
    default_storage_engine=innodb
    innodb_autoinc_lock_mode=2
    innodb_doublewrite=1
    innodb_flush_log_at_trx_commit=2


    /etc/init.d/mysql bootstrap
    /etc/init.d/mysql restart

    主

    cat >/etc/my.cnf.d/server.cnf <<EOF
    [mysqld]
    binlog_format=ROW
    default_storage_engine=innodb
    wsrep_replicate_myisam=1
    innodb_autoinc_lock_mode=2
    innodb_locks_unsafe_for_binlog=1
    innodb_doublewrite=1
    innodb_flush_log_at_trx_commit=2
    query_cache_size=0
    query_cache_type=0
    #bind-address=0.0.0.0

    [galera]
    ## WSREP options
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    #wsrep_provider_options=
    wsrep_cluster_name='cluster1'
    wsrep_cluster_address=gcomm://10.40.211.2 ##主节点 IP
    wsrep_node_name='db1'
    wsrep_node_address='10.40.211.2'
    #wsrep_node_incoming_address=
    wsrep_slave_threads=1
    wsrep_max_ws_rows=131072
    wsrep_max_ws_size=1073741824
    wsrep_debug=0
    wsrep_convert_LOCK_to_trx=0
    wsrep_retry_autocommit=1
    wsrep_auto_increment_control=1
    wsrep_drupal_282555_workaround=0
    wsrep_causal_reads=0
    wsrep_sst_method=rsync
    wsrep_sst_auth=root:Aa258369
    EOF





    从

    cat >/etc/my.cnf.d/server.cnf <<EOF
    [mysqld]
    binlog_format=ROW
    default_storage_engine=innodb
    wsrep_replicate_myisam=1
    innodb_autoinc_lock_mode=2
    innodb_locks_unsafe_for_binlog=1
    innodb_doublewrite=1
    innodb_flush_log_at_trx_commit=2
    query_cache_size=0
    query_cache_type=0
    #bind-address=0.0.0.0

    [galera]
    ## WSREP options
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    #wsrep_provider_options=
    wsrep_cluster_name='cluster1'
    wsrep_cluster_address=gcomm://10.40.211.2 ##主节点 IP
    wsrep_node_name='db2'
    wsrep_node_address='10.40.211.1'
    #wsrep_node_incoming_address=
    wsrep_slave_threads=1
    wsrep_max_ws_rows=131072
    wsrep_max_ws_size=1073741824
    wsrep_debug=0
    wsrep_convert_LOCK_to_trx=0
    wsrep_retry_autocommit=1
    wsrep_auto_increment_control=1
    wsrep_drupal_282555_workaround=0
    wsrep_causal_reads=0
    wsrep_sst_method=rsync
    wsrep_sst_auth=root:Aa258369
    EOF


    Test


    SELECT table_schema "DB Name",
    Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
    FROM information_schema.tables
    GROUP BY table_schema;

    SELECT table_name AS "Tables",
    round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB"
    FROM information_schema.TABLES
    WHERE table_schema = "$DB_NAME"
    ORDER BY (data_length + index_length) DESC;

    SELECT TABLE_NAME AS "Table Name",
    table_rows AS "Quant of Rows", ROUND( (
    data_length + index_length
    ) /1024, 2 ) AS "Total Size Kb"
    FROM information_schema.TABLES
    WHERE information_schema.TABLES.table_schema = 'YOUR SCHEMA NAME/DATABASE NAME HERE'
    LIMIT 0 , 30

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

    MYSQL

    建表
    create database amarokdb;

    grant usage on *.* to amarokuser@localhost identified by 'amarokpasswd';
    grant all privileges on amarokdb.* to amarokuser@localhost ;

    建立用户 分配权限
    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
    FLUSH PRIVILEGES;

    删除用户
    DROP USER ‘ demo ’@‘ localhost ’;
    qcloud
    qcloud
    OP
    Jun 6, 2016
    15
    @notgod 我也不想搞那,方便留个联系方式吗,我给你两台 windows 机器帮我配置一下吧,其他的都好说,拜托了,我折腾两天了,唉
    notgod
    notgod
    Jun 6, 2016
    16
    这个那时候拿 Linode 的机器 部署测试的
    测试无问题 你自己理下
    我 5 个文档贴出来的 有些乱
    qcloud
    qcloud
    OP
    Jun 6, 2016
    17
    @notgod 留个联系方式吧,哥们,拜托了
    notgod
    notgod
    Jun 6, 2016
    18
    @qcloud
    win 不会 只会 Linux
    而且也木时间 要开始搬砖了
    qcloud
    qcloud
    OP
    Jun 6, 2016
    19
    @notgod 可以 linux 弄那。
    qcloud
    qcloud
    OP
    Jun 6, 2016
    20
    @BOYPT galeracluster 貌似没有 win 版吧。
    BOYPT
    BOYPT
    Jun 6, 2016
    21
    @qcloud 还要支持 windows 是不是太苛刻了。。。。 hhh 确实没有,要不你开个虚拟机装个 linux 里面跑?
    qcloud
    qcloud
    OP
    Jun 6, 2016
    22
    @BOYPT 我也看不懂英文,你有时间吗哥们,我装成 linux ,你帮我配置下好吗,不白忙活
    fuxiaopang
    fuxiaopang
    Jun 6, 2016 via iPhone❤️1
    23
    把主从机器的 binlog 都清空,然后把主的数据库 dump 出来,然后清空从数据库,重新用主数据库的备份恢复,之后再开始从数据库的同步。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1835 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 15:56 · PVG 23:56 · LAX 07:56 · JFK 10:56
    ♥ Do have faith in what you're doing.