zoukankan      html  css  js  c++  java
  • msyql 主从配置

    vim /etc/mysql/my.cnf;
    # 以下部分一定要配置在[mysqld]后面
    [mysqld] 
    log-bin=mysql-bin  
    server-id=1        //设置数据库服务器唯一ID,这里我们指定为1。
    binlog-do-db=hyii2  //设置需要同步的数据库,如果需要设置多个,则加入多条这行语句,若需同步所有库,则无需此项
    重启数据库
    service mysql restart
    登陆
    mysql -u root -p //然后输入密码登录
     进入数据库之后给主数据库授权一个可以进行复制的用户,执行如下命令:
    mysql> grant replication slave on *.* to 'slave'@'%' identified by '123456';
    查看是否创建成功
    mysql> use mysql;
    mysql> select user,host from user;

    blob.png

    查看主数据库信息
    mysql> show master status;

    Screenshot-0.png

    以上的信息需要记一下 从数据库会用到

    从库配置

     连接从库,修改mysql配置文件 /etc/mysql/my.cnf,这部分一定要配置在[mysqld]后面

    登录到从库的数据库,做同步设置(此处要用到上面的数据)

    [mysqld]
    server-id=2
    mysql> slave stop; //先关闭库服务
    
    mysql> change master to 
    master_host='192.168.0.101',
    master_user='slave',
    master_password='123456',
    master_log_file='mysql-bin.000002',
    master_log_pos=154;
    
    mysql> slave start; //启动库服务

    测试同步结果

    在主库hyii2中新建一个表test,然后看下从库是否相应生成对应的test表,如果生成了那么恭喜你,主从同步配置就成功了。

    实际应用中可能会用到单个表的同步,或者部分表的同步,只需要在主库的/etc/my.cnf里加上

    只复制某个表replicate-do-table=tablename
    只复制某些表(可用匹配符)replicate-wild-do-table=tablename%
    只复制某个库replicate-do-db=dbname
    只复制某些库replicte-wild-do-db=dbname%
    不复制某个表replicate-ignore-table=tablename

    Yii2配置

    [
        'class' => 'yiidbConnection',
    
        // configuration for the master
        'dsn' => 'dsn for master server',
        'username' => 'master',
        'password' => '',
    
        // common configuration for slaves
        'slaveConfig' => [
            'username' => 'slave',
            'password' => '',
            'attributes' => [
                // use a smaller connection timeout
                PDO::ATTR_TIMEOUT => 10,
            ],
        ],
    
        // list of slave configurations
        'slaves' => [
            ['dsn' => 'dsn for slave server 1'],
            ['dsn' => 'dsn for slave server 2'],
            ['dsn' => 'dsn for slave server 3'],
            ['dsn' => 'dsn for slave server 4'],
        ],
    
        //如果有多个主库,否则无需如下配置
        'masters' => [
            ['dsn' => 'dsn for master server 1'],
            ['dsn' => 'dsn for master server 2'],
        ],
    ]

    Laravel配置

    注意我们在配置数组中新增了两个键:readwrite,这两个键对应值都有一个包含单个键“host”的数组,而其所映射的 IP 值分别就是读连接和写连接,读/写连接的其它数据库配置项都共用 mysql 的主数组配置。

    如果我们想要覆盖主数组中的配置,只需要将相应配置项放到 readwrite 数组中即可。在本例中,192.168.1.1 将被用作“读”连接,而 192.168.1.2 将被用作“写”连接。两个数据库连接的凭证(用户名/密码)、前缀、字符集以及其它配置将会共享 mysql 数组中的设置,同理,如果不一样的话,分别在 readwrite 数组中单独配置即可。

    'mysql' => [
        'read' => [
            'host' => '192.168.1.1',
        ],
        'write' => [
            'host' => '196.168.1.2'
        ],
        'driver'    => 'mysql',
        'database'  => 'database',
        'username'  => 'root',
        'password'  => '',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ],

    对于大部分应用来说都是读多写少,所以面对这种情况,可如下配置多个读连接,

    'mysql' => [
        'driver' => 'mysql',
        'read' => [
            'host' => ['193.168.1.1', '194.168.1.1']
        ],
        'write' => [
            'host' => '196.168.1.2'
        ],
        //
    ]

    TP5配置(前主后从)

        // 数据库类型
        'type'            => 'mysql',
        // 服务器地址
        'hostname'        => '192.168.36.22,192.168.36.23',
        // 数据库名
        'database'        => 'linux',
        // 用户名
        'username'        => 'root,root',
        // 密码
        'password'        => 'junwang@2014,junwang@2014',
        // 端口
        'hostport'        => '3306,3306',
        // 连接dsn
        'dsn'             => '',
        // 数据库连接参数
        'params'          => [],
        // 数据库编码默认采用utf8
        'charset'         => 'utf8,utf8',
        // 数据库表前缀
        'prefix'          => 'tp_',
        // 数据库调试模式
        'debug'           => true,
        // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
        'deploy'          => 1,
        // 数据库读写是否分离 主从式有效
        'rw_separate'     => true,
        // 读写分离后 主服务器数量
        'master_num'      => 1,
        // 指定从服务器序号
        'slave_no'        => '',
        // 是否严格检查字段是否存在
        'fields_strict'   => true,
        // 数据集返回类型
        'resultset_type'  => 'array',
        // 自动写入时间戳字段
        'auto_timestamp'  => false,
        // 时间字段取出后的默认时间格式
        'datetime_format' => 'Y-m-d H:i:s',
        // 是否需要进行SQL性能分析
        'sql_explain'     => false,
    作者地址:https://www.cnblogs.com/G921123/
    创作也有乐趣 知识分享 转载注明出处 相互理解 谢谢! WeChat:17321295203
  • 相关阅读:
    iis添加证书
    重谈主键和索引
    关于心跳包的方案探究
    flutter android keystore
    flutter photo_view的改造
    dart 命名规范
    dart 公共变量
    flutter 交互提示方式
    flutter container image FittedBox AspectRatio
    聊聊flutter的UI布局
  • 原文地址:https://www.cnblogs.com/G921123/p/10245746.html
Copyright © 2011-2022 走看看