mysql 主从配置
- mysql使用的是5.7的版本,先安装mysql
配置主从服务
- 在master上分配slave权限给用户
GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO repluser@'172.26.131.99' IDENTIFIED BY 'replpass';
repluser 表示的为用户
172.26.131.99 表示的是从服务器
IDENTIFIED BY 'replpass'; 表示的是repluser对应的密码
- 查看主服务状态
SHOW MASTER STATUS;
- 操作从服务
change master to master_host='172.26.131.98', master_user='repluser',master_password='replpass',master_log_file='5306-mysql-bin.000002',master_log_pos=733;
master_log_file 就是刚才show master status 里面的binlong
master_log_pos 就是刚才show master status 里面的pos
- 启动slave
start slave;
- 检查配置是否成功
show slave status \G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
当上面两个都为yes的时候就表示成功了,目前我遇到的问题有:
2016-03-10T07:19:04.236362Z 6 [Warning]
2016-03-10T07:19:04.236675Z 7 [Warning] Slave SQL for channel '': If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0
检查一下主从server_id是不是重复了,修改之后重启服务器就好了。
@@GLOBAL.GTID_PURGED was changed from '' to '43999aac-449b-11ea-864d-5254004b7586:1-2,
解决方案
reset master
mysql 跨环境数据同步
当我们在做压测或者数据迁移的时候,经常会有把整个库的数据从线上环境导入到线下环境,简单来说就是跨环境数据迁移。
- 导出,dump出压缩包
mysqldump -uroot -ppassword abc >gzip > db_abc.sql.gzip
mysqldump -uroot -ppassword abc >db_abc.sql
第一种方式dump出的是一个压缩包,比第二个省空间
- 使用scp跨环境传输,需要注意的是环境直接是可以互通的
scp root@ 172.26.130.3:/root/seal_item.sql.gz /root/
root@ 172.26.130.3 表示源地址
:/root/seal_item.sql.gz 表示对应的路径
/root/ 表示目标路径
- 导入
mysql -uroot -ppassword abc <gzip </root/backup/abc.sql.gzip
mysql -uroot -ppassword abc < /root/backup/db_abc.sql
经验发现,压缩包的方式比较快
mysql 分配用户,授权等常用操作
- 查看当前所有用户
SELECT * FROM mysql.user;
- 创建用户
CREATE USER 'user_name'@'host' IDENTIFIED BY 'password';
@host表示可以登录的机器,配置为localhost表示为当前机器可以登录,%表示远程登录
identified by 'password' 表示登录密码,可以不设置
- 查看用户拥有的权限
show grants for 'exam'@'%';
- 对用户进行授权
grant all privileges on databasename.tablename TO 'username'@'%' ;
PRIVILEGES 表示要授予的权限,常用的有select,insert,update,如果要授予全部权利设置为all
databasename.tablename 表示要授予的库和表,如果要授予全部的库和表设置为.的通配符配置
'username'@'host' 表示要授予的用户
- 撤销用户权限
revoke all on *.* from dba@localhost;
- 解决主从同步数据不一致问题
/usr/local/mysql/bin/mysql -uroot -P 3307 -S /usr/local/mysql/sock/mysql5306.sock -p
stop slave;
change master to master_log_file='5306-mysql-bin.000087',master_log_pos=2009567;
start slave;
这种做法有点暴力,会导致从库丢数据。
网友评论