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
原文地址:https://www.cnblogs.com/G921123/p/10245746.html