mysql01
mysql的安装与配置
安装centos6.9
网卡设置
1 cd /etc/sysconfig/network-scripts 2 vim ifcfg-eth0 3 onboot yes 4 DNS1=8.8.8.8
service network restart
mysql的安装
1.http://dev.mysql.com/downloads/repo/yum/
2.yum localinstall mysql57-community-release-el6-11.noarch.rpm
3.yum -y install mysql-community-server
重启mysql服务
service mysqld start
第一次登陆从log日志中取得随机密码
1 more /var/log/mysqld.log
"a temporary password is generated for root"
q 退出
修改密码的复杂度
1 修改密码的复杂度 2 set global validate_password_policy=0; 3 修改密码的长度 4 set global validate_password_length=1; 5 6 alter user 'root'@'localhost' identified by 'root';
其他操作
1 创建用户 2 create user 'test'@'%' identified by 'test'; 3 4 查看当前的用户 5 select user,host from mysql.user; 6 7 通过用户名和主机才能唯一确定一个用户 8 alter user 'test'@'%' indentified by '1234'; 9 10 赋予权限 11 grant + 权限 + 数据库.数据表 to 用户 12 grant replication slave on *.* to 'test'@'%'; 13 14 回收权限 15 revoke all on *.* from 'test'@'%'; 16 17 删除用户 18 drop user 'test'; 19 20 备份数据库 21 mysqldump -uroot -p 数据库名 备份到的路径 22 mysqldump -uroot -p user > /root/mysqlback.sql 23 24 恢复数据库 25 mysqldump -uroot -p mytest >~/bak/mytest.sql 26 user mytest; 27 drop table user; 28 quit 29 30 mysql -uroot -p mytest < mytest.sql
主从复制
数据冗余,提高数据的安全性
提高服务器的负载
原理:从节点读取主节点的binlog日志
场景:数据库备份,读写分离
主从配置搭建
主192.168.239.140 从192.168.239.141
主机配置
1 创建用户 2 create user 'repl'@'192.168.239.%' indetified by 'repl'; 3 4 查看用户 5 select * from mysql.user\G; 6 7 赋予只读权限 8 grant replication slave on *.* to 'repl'@'192.168.239.%' identified by 'repl';
mysql 日志
Error log 错误日志
General query log 普通查询日志
slow query log 慢查询日志
Binary log 二进制日志文件
Binary log作用:增量备份,主从
1 开启binlog日志 2 vim /etc/my.cnf 3 server-id=1 #多节点不可重复 4 log-bin=/var/lib/mysql/mysql-bin #指定bin log 的日志文件名 5 6 7 mysql-bin.00001 是日志文件的数据文件 8 mysql-bin.index 是日志文件的索引文件 9 10 查看bin log 文件配置 11 show variables like '%log_bin%';
查看二进制文件
1 mysqlbinlog filename 2 或 3 >show binlog events; 4 5 6 查看具体的二进制文件 7 >show binlog events in ‘Log_name’; 8 9 每次重启服务器,服务器调用flush logs,会重创建新的bin-log日志文件 10 11 flush logs 刷新日志文件,产生新的日志文件 12 13 show master status; 14 查看当前日志状态 15 16 show master logs 17 查看所有的日志文件 18 19 reset master 20 清空所有的日志文件 21 23 binlog 恢复数据 24 25 mysqlbinlog bin 日志文件名 | mysql -uroot -p 26 mysqlbinlog mysql-bin.000001 | mysql -uroot -p 27 28 恢复指定数据 29 mysqlbinlog mysql-bin.000001-start-position 219 -stop-position 412 | mysql -uroot -p
从机配置
1 复制网卡信息,修改网卡信息(随机) 2 00:0C:29:D5:95:67 3 4 vi /etc/sysconfig/network-scripts/ifcfg-eth0 5 修改 mac 地址 6 7 cd /etc/udev/rules.d 8 rm -rf * 9 10 重启 11 reboot
从节点
配置同步日志
指定主节点的ip 端口,用户,等信息
启动从节点
1 配置日志 2 vi /etc/my.cnf 3 4 server-id=2 与主机不一致 5 log-bin=/var/lib/mysql/relay-bin 6 7 重启服务 8 service mysqld restart
1 change master to master_host='192.168.239.140' , master_port=3306,master_user='repl',master_password='repl',master_log_file='mysql-bin.000001',master_log_pos=0; 2 3 start slave; 4 5 show slave status\G 6 7 注意 8 Slave_IO_Running Connection 连接到主库,并读取主库的日志到本地,生成本地日志文件 9 Slave_SQL_Running Yes 读取本地日志文件,并执行日志里的SQL命令。
异常处理
Slave_IO_Running NO
Slave_SQL_Running Yes
1 cd /var/lib/mysql 2 cat auto.cnf 3 4 vi auto.cnf 5 随机修改server-uuid
Slave_IO_Running Connection
Slave_SQL_Running NO
1 解决办法一、 2 Slave_SQL_Running: No 3 1.程序可能在slave上进行了写操作 4 2.也可能是slave机器重起后,事务回滚造成的. 5 一般是事务回滚造成的: 6 解决办法: 7 mysql> slave stop; 8 mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 9 mysql> slave start; 10 11 解决办法二、 12 首先停掉Slave服务:slave stop 13 到主服务器上查看主机状态: 14 记录File和Position对应的值 ,注意master_log_file是否发生变化 15 进入master 16 mysql> show master status; 17 mysql>change master to master_host='192.168.239.140' , master_port=3306,master_user='repl',master_password='repl',master_log_file='mysql-bin.000001',master_log_pos=0; 18 mysql> show slave status\G
主机需要关闭防火墙
service iptables status
service iptable stop
slave
mysql -urepl -p -h192.168.239.140
ok
在主节点上操作,从机会默认同步
mysql 的主主复制就是两台 mysql 节点互为主从
在原来主从的基础上做如下操作:
1.开启原从节点的 binlog 日志
1 salve 2 3 vim /etc/my.cnf 4 log-bin=/var/lib/mysql/mysql-bin 5 service mysqld restart
2.原从节点创建读取副本的用户
1 slave 2 create user 'repl'@'192.168.239.%' identified by 'repl'; 3 grant all on *.* to 'repl'@'192.168.239.%'; 4 5 show master status;
3.在原主节点中让 master 指向从节点
1 change master to master_host='192.168.239.141',master_port=3306,master_user='repl', 2 master_password='repl',master_log_file='mysql-bin.000001',master_log_pos=616;
4.在原主节点执行 start slave 命令
master
start slave;
以上步骤即可完成主主节点的配置
下面有一个问题需要解决,就是自增主键的问题,按照上面的做法,如果向两个节点中插
入数据,一定会导致主键的重复,这里需要一个小的技巧
这里让第一台节点主键采用 1, 3 ,5 ,7.的方式自增
第二台节点采用 2, 4, 6, 8 的方式递增,这样就不会导致主键冲突了,在 MySQL5.7 中,不需要配置主键自增策略,每个库的操作都会让另外一个库递增
1 master 2 vim /etc/my.cnf 3 4 auto_increment_increment=2 5 auto_increment_offset=1 6 7 8 slave 9 vim /etc/my.cnf 10 11 auto_increment_increment=2 12 auto_increment_offset=2
完