mysql主从复制,读写分离配置
1.主数据库:
a.在主数据库里创建一个同步账号
#每个从数据库会使用一个MySQL账号来连接主数据库,所以我们要在主数据库里创建一个账号,并且该账号要授予 REPLICATION SLAVE 权限,你可以为每个从数据库分别创建账号,当然也可以用同一个!)
#下面来创建一个账号,账号名:repl,密码:123456,只允许192.168.1.的IP段登录,如下:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
#如果开发防火墙,可能要配置下端口,如下:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
b.配置主数据库
#需要关闭MySQL和编辑my.cnf或者my.ini文件,在 [mysqld] 节点下添加或修改配置。
vim my.cnf
#添加或修改配置以下内容:
log-bin=mysql-bin # 启用二进制日志,日志文件名以“mysql-bin”作为前缀
server-id=1 # 如果不配置server-id或者配置值为0,那么主服务器将拒绝所有从服务器的连接。
binlog-do-db=mstest # mstest是要同步的数据库名称
innodb_flush_log_at_trx_commit=1
sync_binlog=1
binlog-ignore-db=mysql # 要忽略的数据库
#重启mysql
mysql> show master status;
#执行上面命令记录好File和Position,后面要用
2.从数据库配置:
a.vim my.cnf
#添加或修改配置以下内容:
server-id=2 # 如果有多个从服务器,每个服务器的server-id不能重复,跟IP一样是唯一标识,如果你没设置server-id或者设置为0,则从服务器不会连接到主服务器。
replicate-do-db = mstest #在master端不指定binlog-do-db,在slave端用replication-do-db来过滤
replicate-ignore-db = mysql #忽略的库
relay-log=mysqld-relay-bin
b.配置连接主服务器的信息
mysql> stop slave;
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.1.233',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000002', #配置主数据库show master status的File
-> MASTER_LOG_POS=313; #配置主数据库show master status的Position
mysql> start slave;
c.查看从服务器状态
mysql> show slave status \G;
如果slave_io_running和slave_sql_running都为yes,那么表明可以成功同步了
3.测试数据同步
测试,Navicat连接主服务器 ,添加了表
然后再连接上 从服务器mysql,发现也自己同步创建了该表即成功
备注:以上是以mysql5.5为例,而 MariaDB可能有点不同,
那些server—id的配置需要在 /etc/my.cnf.d/server.cnf 或者目录下有名为 Data的名为 my.ini 的文本文件 增加相关配置;
navicat 连接虚拟机mysql连不上问题:
1.登陆mysql
#mysql -u root -p
2.修改mysql库的user表,将host项,从localhost改为%。%这里表示的是允许任意host访问,如果只允许某一个ip访问,
则可改为相应的ip,比如可以将localhost改为192.168.1.123,这表示只允许局域网的192.168.1.123这个ip远程访问mysql。
更改数据库用户权限grant all privileges on portal.* to root@zq27 identified by 'root';
mysql> use mysql;
mysql> grant all privileges on portal.* to root@zq27 identified by 'root';
mysql> update user set host = '%' where user = 'root';
#若出现ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' 不予理会,继续即可
mysql> flush privileges;