Yii2 Laravel TP5 msyql 主从配置



vim /etc/mysql/my.cnf;
# 以下部分一定要配置在[mysqld]后面
[mysqld]
log-bin=mysql-bin
server-id=        //设置数据库服务器唯一ID,这里我们指定为1。
binlog-do-db=hyii2  //设置需要同步的数据库,如果需要设置多个,则加入多条这行语句,若需同步所有库,则无需此项




重启数据库
service mysql restart




登陆
mysql -u root -p //然后输入密码登录




 进入数据库之后给主数据库授权一个可以进行复制的用户,执行如下命令:
mysql> grant replication slave on *.* to ';




查看是否创建成功
mysql> use mysql;
mysql> select user,host from user;




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



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


从库配置


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


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



[mysqld]
server-id=




mysql> slave stop; //先关闭库服务

mysql> change master to
master_host='192.168.0.101',
master_user='slave',
master_password=',
master_log_file='mysql-bin.000002',
master_log_pos=;

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' => 'yii\db\Connection',

    // 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 => ,
        ],
    ],

    // 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 分布式(主从服务器)
    ,
    // 数据库读写是否分离 主从式有效
    'rw_separate'     => true,
    // 读写分离后 主服务器数量
    ,
    // 指定从服务器序号
    'slave_no'        => '',
    // 是否严格检查字段是否存在
    'fields_strict'   => true,
    // 数据集返回类型
    'resultset_type'  => 'array',
    // 自动写入时间戳字段
    'auto_timestamp'  => false,
    // 时间字段取出后的默认时间格式
    'datetime_format' => 'Y-m-d H:i:s',
    // 是否需要进行SQL性能分析
    'sql_explain'     => false,