mysql主从笔记

阅读次数: 8,202

  • A+
所属分类:建站 运维

用户操作

create user 'fuxuan002'@'172.18.67.213' identified by '666666'; // 用户创建

grant all privileges on 33hao.* to 'fuxuan002'@'172.18.67.213'; //用户授权

flush privileges;//刷新权限

show master status\G

show salve status\G

mysql> change master to
    -> master_host='192.168.95.11',
    -> master_user='mysql11',
    ->master_password='mysql11',
    ->master_log_file='mysql-bin.000097',
    -> master_log_pos=107;

mysql恢复与bin-log日志

1.mysql备份

/usr/local/mysql/bin/mysqldump -uroot -p666666 33hao > /home/mysql/2017-10-23.sql

2.mysql恢复

mysql -uroot -p666 test -v -f < /tmp/test.sql

-v 查看导入的详情

-f 是当中间遇到错误时,可以skip过去,继续执行下边的语句

3.从bin-log日志恢复

cd /usr/local/mysql/var

/usr/local/mysql/bin/mysqlbinlog --no-defaults mysql-bin.000008 | more #查看binlog日志

mysqlbinlog --no-defaults mysql-bin.00001 | msyql -uroot -p333 test  #test 可加可不加

如果出现误删除则可以用position来根据具体的位置来恢复

mysqlbinlog --no-defaults --stop-position="238" msyql-bin.0000012|mysql -uroot -p666 test #从bin-log日志恢复数据并在position 为238的位置结束

--stop-position='100'

--start-postion='60'

--stop-date='2017-06-21 21:17:32'

--start-date='2017-10-23 01:32:10'

4.配置

my.conf

log-bin=mysql-bin

server-id = 1  #主服务器的server_id

配置完成后查看


show slave status\G 查看是否成功

start slave 启动复制线程

stop slave 停止复制线程

show master logs 查看主数据库bin-log 日志

change master to 动态改变主服务的配置

show processlist 查看从数据库运行进程

注意:这里需要更多的配置 (默认的 bin-log 大小为 1G)会导致服务器 出现 event_log 过大

log_bin = /usr/local/mariadb/data/mysql-bin.log
max_binlog_size = 512M

所以应该添加上边的 配置参数


当数据库中的用户表的金额出现错误时,需要通过binlog日志来查询问题点

1.导出 binlog 到静态文件

/usr/local/mariadb/bin/mysqlbinlog --database=shipan mysql-bin.000005 > /home/jack/db.sql

2.过滤用户表数据

grep -B3 -w wh_user db.sql > table.sql

3.通过grep过滤想要的数据

grep table.sql | grep 'jack'

grep table.sql | grep 'UPDATE'


flush tables with read lock; 读锁

unlock tables;解锁

reset master #初始化 position

show master status  #显示position

show grants for user1@172.18.67.212

pkill mysqld 关闭msyql

/usr/local/mysql/bin/mysqld_safe --user=mysql &

启动mysql

php链接

mysql_connect("192.168.1.1",'user','666')

mysql_select_db('test');

$sql = "select * from test1";

$result = mysql_query($sql);

while($row = msyql_fetch_assoc($result)){

echo '<br>';

print_r($row);

echo '</br>';

}

附 当从数据库无法同步时解决方案

Show slave status 显示 Slave_SQL_Running 为No,Seconds_Behind_Master 为null 时

可能是在从数据库上进行了写的操作

方法1:

slave stop;

set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

slave start;

方法2:

从   slave stop

主 show master status;

从 手动同步

mysql>change master to

master_host = "192.168.1.1",

master_user= "jack",

master_password = '555',

master_port=3306,

master_log_file="mysql-bin.000009",

master_log_pos=258;

然后启动同步 slave start

最后再查看 show slave status 看到 Slave_SQL_Runnig 为Yes Second_Behind_Master 为0即为成功了

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: