V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qcloud
V2EX  ›  问与答

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

  •  
  •   qcloud · 2016-06-06 10:36:36 +08:00 · 1631 次点击
    这是一个创建于 2889 天前的主题,其中的信息可能已经有所发展或是发生改变。
    主主同步配置好之后发现两个数据库没有进行同步,于是我检查了服务器 A ,使用命令: show slave status\G ,一切正常,然后再去看服务器 B ,结果就报错了。所以无法正常同步。请看报错截图,我通过 google 解决了前面一些问题,但这次表示完全懵比。。。。
    https://ooo.0o0.ooo/2016/06/05/5754e38f0d82c.png
    在线等,拜托了。
    第 1 条附言  ·  2016-06-06 11:55:51 +08:00
    23 条回复    2016-06-06 22:48:00 +08:00
    zeraba
        1
    zeraba  
       2016-06-06 11:08:51 +08:00
    贴下全程的配置方法啊,包括建立 REPLICAITON SLAVE 账号 主从数据库的配置参数
    单看这个报错,只能靠猜了
    hcymk2
        2
    hcymk2  
       2016-06-06 11:09:39 +08:00
    你只同步一个数据库吧。 看下你的配置文件。
    qcloud
        3
    qcloud  
    OP
       2016-06-06 11:20:11 +08:00
    @zeraba
    @hcymk2
    这是服务器 B 的配置文件,是的,只同步一个 data 数据库
    https://ooo.0o0.ooo/2016/06/05/5754edb58c2e2.png
    lytofb
        4
    lytofb  
       2016-06-06 11:25:38 +08:00
    我不是很懂 mysql 的数据库同步,双主同步不会发生脑裂么?
    loading
        5
    loading  
       2016-06-06 11:26:01 +08:00 via Android
    提醒一下:别搞反了。

    某公司这样丢过数据
    qcloud
        6
    qcloud  
    OP
       2016-06-06 11:27:29 +08:00
    @lytofb 不会的
    @loading 多谢提醒
    notgod
        7
    notgod  
       2016-06-06 12:14:29 +08:00   ❤️ 1
    上次就回你一次了 又来这逗比问题
    你不要搜索一些古董资料 和中文资料 去 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
        8
    qcloud  
    OP
       2016-06-06 12:33:56 +08:00
    @notgod 上次那个问题我已经改成了,老兄,目前这个真不好搞,是在下愚昧,麻烦大仙指点迷津。
    qcloud
        9
    qcloud  
    OP
       2016-06-06 12:46:22 +08:00
    qcloud
        10
    qcloud  
    OP
       2016-06-06 12:46:42 +08:00
    @notgod 在线等大神
    notgod
        11
    notgod  
       2016-06-06 13:33:20 +08:00
    你没看我说的?

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


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

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

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

    参考资料
    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
        15
    qcloud  
    OP
       2016-06-06 13:55:01 +08:00
    @notgod 我也不想搞那,方便留个联系方式吗,我给你两台 windows 机器帮我配置一下吧,其他的都好说,拜托了,我折腾两天了,唉
    notgod
        16
    notgod  
       2016-06-06 13:55:06 +08:00
    这个那时候拿 Linode 的机器 部署测试的
    测试无问题 你自己理下
    我 5 个文档贴出来的 有些乱
    qcloud
        17
    qcloud  
    OP
       2016-06-06 13:57:57 +08:00
    @notgod 留个联系方式吧,哥们,拜托了
    notgod
        18
    notgod  
       2016-06-06 14:03:03 +08:00
    @qcloud
    win 不会 只会 Linux
    而且也木时间 要开始搬砖了
    qcloud
        19
    qcloud  
    OP
       2016-06-06 14:04:00 +08:00
    @notgod 可以 linux 弄那。
    qcloud
        20
    qcloud  
    OP
       2016-06-06 14:04:52 +08:00
    @BOYPT galeracluster 貌似没有 win 版吧。
    BOYPT
        21
    BOYPT  
       2016-06-06 14:09:54 +08:00
    @qcloud 还要支持 windows 是不是太苛刻了。。。。 hhh 确实没有,要不你开个虚拟机装个 linux 里面跑?
    qcloud
        22
    qcloud  
    OP
       2016-06-06 14:12:29 +08:00
    @BOYPT 我也看不懂英文,你有时间吗哥们,我装成 linux ,你帮我配置下好吗,不白忙活
    fuxiaopang
        23
    fuxiaopang  
       2016-06-06 22:48:00 +08:00 via iPhone   ❤️ 1
    把主从机器的 binlog 都清空,然后把主的数据库 dump 出来,然后清空从数据库,重新用主数据库的备份恢复,之后再开始从数据库的同步。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1576 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 16:34 · PVG 00:34 · LAX 09:34 · JFK 12:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.