linux的mysql主从
数据库备份命令:mysqldymp -u username -p password -B databaseName > fileName.sql
拷贝到从服务器:scp fileName.sql 从IP:/root //IP:要拷贝到的目录
一、主---从
主服务器:
1、停止数据库:service mysqld stop / systemctl stop mariadb(7版本以上)
2、配置文件:vim /etc/my.cnf
定义为主服务器:server-id=1
用户二进制日志:log-bin=mysql-bin-master(名字随意起)
定义复制哪个库:binlog-do-db=数据库名
定义哪个库不可以复制:binlog-ignore-db=mysql(数据库名)
3、重启数据库:service start mysqld / systemctl start mariadb
4、登录数据库授权:创建用户给从服务器
grant replication slave on *.* to slave@从IP identified by "1234"
(复制权限) (所有表) (密码)
密码不符合要求,修改密码要求:
定义密码长度:set global validate_password_policy=0;
定义默认长度:set global validate_password_length=1;
5、刷新权限:flush privileges;
6、查看二进制:show master sttus;
7、查看二进制事件:show binlog events \G
从服务器
1、测试登录远程mysql:mysql -uuserName -ppassword -h 主IP
2、导入:mysql -uuserName -ppassword <fileName.sql
3、停止mysql
4、修改配置文件:
vim /etc/my.cnf
server=2
5、重启、进入mysql(root)
6、指定从哪个master(主):
change master to master_host='主IP';master_user="主名",master_password="主密";
7、重启从:start 从名
8、查看从的状态:show 从名 status \G(以行形式查看)
排错:
如果遇到主从不同步,看一下主从bin-log的位置,然后再同步
主---show master status \G
从---show 从名 status \G
强制同步
在主服务器指定file和position
在从服务器运行:
change master to master_log_file='file名';
master_log_pos=position值
在执行前先停止从:stop 从名
执行后启动从:start 从名
排错思路:
1、二进制日志有没有开启
2、IPTABLES有没有开放端口
3、对应的主机IP地址有没有写错
sql线程出错:
1、主从服务器数据库不统一:
出错后,数据少,可手动解决创建插入,再更新从的状态。