mysql 主从

安装mysql忽略

//锁数据(主库操作)
MySQL> flush tables with read lock;
备份主数据库:(备份时最好加上只读限制,不允许新数据写入)(主库操作)
mysqldump -uroot -p --all-databases > /opt/all-2020-06-04.sql
//退出并释放数据锁(主库操作)
MySQL> quit;
传输到从:(主库操作)
scp /opt/all-2020-06-04.sql root@192.168.0.41:/opt/

从导入所有数据:(从库操作)
mysql -uroot -p < /opt/all-2020-06-04.sql
//创建repl用户,专门用于复制数据使用(主库操作),并允许从局域网访问
MySQL> grant replication slave on *.* to 'repl'@'192.168.0.%' identified by '123456';
MySQL> flush privileges;

配置主数据库编辑配置文件
vim /etc/my.cnf
/添加或修改以下信息:
log-bin=mysql-bin //启用binlog日志
server-id=1 //主数据库服务器唯一标识符 主的必须必从大
保存退出

重启mysql服务
service mysql restart

配置从数据库
vim /etc/my.cnf
//添加或修改以下信息:
server-id=2 //设置从库的唯一标识符 从的必须比主小
保存退出

重启mysql服务
service mysql restart

查看主状态信息:(主库操作)
MySQL> show master status;
会出现以下信息
mysql-bin.000039 | 1300
配置并启动主从复制
MySQL> change master to
master_host='192.168.0.40',//这里就是主的ip
master_user='repl',//这里新建的复制用户名
master_password='123456',//这里新建的复制用户密码
master_log_file='mysql-bin.000039',//这里show master status 出现的文件名
master_log_pos=1300;//这里show master status 出现的position

查看从状态:(从库操作)
MySQL> show slave status\G;
如果
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
两个yes表示设置成功

主从设置完成。为了从库做主读处理,从配置文件上设置从库只读属性
从库设置只读:
vim /etc/my.cnf
//的log_bin后添加以下信息
read_only=1
保存退出

重启mysql服务
service mysql restart
//查看只读状态:(从库操作)
MySQL> show global variables like "%read_only%";
显示read_only 为 on则表示设置成功

//从库分配使用用户,使用从库的应用要使用dbuser来访问,避免造成写数据,如果使用dbuser来写从库则会提示当前处于read_only模式,禁止写入(主库操作)
MySQL> grant all privileges on *.* to 'dbuser'@'192.168.0.%' identified by '123456';
MySQL> revoke super on *.* from 'dbuser'@'192.168.0.%';//移除用户的super权限,read_only只用普通用户起作用,super用户依据可以写操作,所以要去除掉super权限
MySQL> show grants for 'dbuser'@'192.168.0.%';
MySQL> flush privileges;

//删除指定用户
MySQL> drop user zhangsan@'%';

问题:
Slave_IO_Running: NO
查看错误日志提示:
these UUIDs must
be different for replication to work
uuid重复了
找到auto.cnf修改uuid即可,一般是在数据库的数据存储目录下,如:/data/mysql
vim auto.cnf
修改uuid并保存
重启mysql
service mysql restart

 

laravel主从使用:

修改config/database.php文件:

在connection连接的mysql方式下新建读写信息并关闭host和password项:

'mysql' => [
            //读写配置
            'read'=>[
                ['host'=>'192.168.0.41', 'password'=>'123456'],
            ],
            'write'=>[
                 ['host'=>'192.168.0.40', 'password'=>'123456'],
            ],
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            // 'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            // 'password' => env('DB_PASSWORD', ''),
           //后边项忽略。。
]