实验环境: Ubuntu16.04 两台,mysql 5.7
本次实例为master -slave。
1)安装mysql
在Ubuntu环境中,使用apt-get install mysql-server 安装mysql。
*1)初次使用apt-get 需要进行升级 sudo apt-get update,
*2)apt-get安装命令若提示报错,使用ps -A |grep apt, 查看是否有相关进程在使用。)
遇y确定,安装过程中,弹窗输入密码,两次OK确认之后,安装结束。
可以通过 sudo netstat -tap | grep mysql 发现 mysql 的socket处于 listen 则安装成功。使用mysql -u root -p 进入查看 u代表登录名,p 代表密码。
2)编辑mysqld.cnf
修改参数配置的mysql.cnf在Ubuntu变成了mysqld.cnf,默认在是在/etc/mysql/mysqld.conf.d/mysqld.cnf)下
(1)master 库配置
在[mysqld]下面修改以下参数,不带*为非必要参数,
*user = mysql
*pid-file = /var/run/mysqld/mysqld.pid
*socket = /var/run/mysqld/mysqld.sock
*port = 3306
*basedir = /usr
*datadir = /var/lib/mysql
*server-id = 1 //用来唯一的标识某个数据库实例的值,数值随意,但不可以重复
*log_bin = /var/log/mysql/mysql-bin.log //开启binlog
*binlog_format =mixed //binlog的格式,包括mixed,statement,mixed
sync_binlog =1 // 控制bin日志刷新到磁盘,1表示表示每次事务提交,都把binlog刷新下去(最安全,高并发会影响性能);0表示MySQL不控制binlog的刷新
binlog_do_db = ceshi //指定binlog记录ceshi数据库,多个数据库需分行添加
binlog_do_db = ceshi2
binlog_ignore_db = mysql //指定binlog记录忽略的mysql数据库。
特别注意 bind-address 默认为本地地址,如果需要远程访问,则需要修改指定为从库的地址,或者直接注释掉-.-,否则后面从库同步的时候会报错,提示无法连接 (╥﹏╥)都是泪。
配置完成后,重启mysql 。进入后 执行 show master status \G;显示以下信息
mysql> show master status \G;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 712
Binlog_Do_DB: ceshi,ceshi2
Binlog_Ignore_DB: mysql
Executed_Gtid_Set:
1 row in set (0.01 sec)
记下file和position值,后面从库需要,
(2)slave 端的配置
同样在[mysqld]下面
*server-id = 2
log_bin = mysql-bin
replicate_do_db = ceshi
replicate_do_db = ceshi2
replicate_ignore_db = mysql
重启从库。
3 )在master 添加主从同步的账号,并授权
mysql> create user repl;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库ip地址' IDENTIFIED BY '密码'; // 加粗部分修改为自己的参数。
mysql> flush privileges;
4)在slave库中执行
mysql>change master to master_host='主库ip地址',master_port=3306,master_user='repl',master_password='密码',master_log_file='mysql-bin.000001',master_log_pos=712;
file 及pos值 即上文主库的相应值。
mysql>start slave;
mysql> show slave status \G;查看主从库状态。
如图,表示主从正常。
5)测试下。在主库建立表,数据。看从库是否同步过去。