slave[mysqld] port = 3306 basedir = /data/mysql datadir = /data/mysql/data #日志设置 expire_logs_days = 15 long-query-time = 3 slow-query-log-file=http://www.likecs.com/data/mysql/mysql-log/slow-log/db-slow.log log-error=http://www.likecs.com/data/mysql/mysql-log/err-log/db-err.log #主从设置 server_id = 0003 #这里需要在集群中保持唯一 replicate-do-db=db_test #需要从主库同步的数据库1 replicate-do-db=db_dev #需要从主库同步的数据库2 read_only=1 #只读设置 #性能调优设置 innodb_buffer_pool_size = 24576M max_connections = 5000 max_connect_errors = 6000 external-locking = FALSE max_allowed_packet = 64M join_buffer_size = 64M sort_buffer_size = 2M read_rnd_buffer_size = 16M #SQL模式 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
数据库初始化初始化数据库 cd /data/mysql/bin/ ./mysqld --defaults-file=http://www.likecs.com/etc/my.cnf --user=mysql --initialize #初始化
查看密码(初始化数据库之后会生成一个 root 账户的默认密码)cat /data/mysql/mysql-log/err-log/db-err.log
启动 mysqlservice mysql start
登录并修改 root 密码mysql -u root -p set password = password('root'); flush privileges; #如果需要使用 root 进行远程连接,执行以下语句 use mysql; update user set host = '%' where user = 'root'; flush privileges;
创建用户并赋权
主机 master-a、master-b#创建一个用于和从机“通信”的用户,具有同步权限 grant replication slave on *.* to 'copy'@'%' identified by 'copy' flush privileges; #创建一个用于访问和操作某些特定的库的用户,不应该让应用直接使用 root 用户. grant all privileges on db_test.* to "app_user"@'%' identified by "app_user"; flush privileges;
从机 slave#创建一个用于访问和操作某些特定的库的用户,不应该让应用直接使用 root 用户. grant all privileges on db_test.* to "app_user"@'%' identified by "app_user"; flush privileges;
主从同步启动主机 master-a
在 master-b 中获得二进制日志文件名(master_log_file)及位置(master_log_pos)show master status
在 master-a 中执行以下命令stop slave; #暂停 reset slave; #重置 change master to master_host="master-b 的IP", master_user="copy",master_password="copy",master_log_file="db-binlog.000002",master_log_pos=2532; #设置和主机同步的用户信息,日志文件信息 start slave; #启动 show slave status \G #查看从机状态,主要是看 Slave_IO_Running Slave_SQL_Running 上是否都是 yes
主机 master-b、从机 slave
在 master-a 中获得二进制日志文件名(master_log_file)及位置(master_log_pos)show master status
在 master-b和 slave 中执行以下命令stop slave; #暂停 reset slave; #重置 change master to master_host="master-a 的IP", master_user="copy",master_password="copy",master_log_file="db-binlog.000002",master_log_pos=2532; #设置和主机同步的用户信息,日志文件信息 start slave; #启动 show slave status \G #查看从机状态,主要是看 Slave_IO_Running Slave_SQL_Running 上是否都是 yes
keepalived 安装启动(master-a、master-b)keepalived 安装yum install -y keepalived
keepalived 配置vi /etc/keepalived/keepalived.conf 文件内容为:global_defs { router_id LVS_DEVEL } vrrp_sync_group VG_1 { group { VI_1 } } vrrp_instance VI_1 { state BACKUP #两个机器都是这个值,不要设置为 MASTER,使用下面的 priority 来控制 interface ens33 #通过 ifconfig 查看 virtual_router_id 51 priority 100 #优先级,另一台机器设置为 90 advert_int 1 nopreempt # 另一台优先级低的机器不设置此参数! authentication { auth_type root auth_pass root } virtual_ipaddress { 192.168.86.250 # 这个是VIP } } virtual_server 192.168.86.250 3306 { # 这个是VIP delay_loop 2 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 192.168.86.124 3306 { # 这是机器的IP地址 weight 3 notify_down /data/mysql/bin/mysql.sh TCP_CHECK { connect_timeout 5 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } }
创建一个关闭 keepalived 的脚本,用于在 mysql 无法访问时,关闭 keepalived 以释放 VIPvi /data/mysql/bin/mysql.sh 文件内容为:#!/bin/sh pkill keepalived 将文件设置为可执行文件:chmod +x /data/mysql/bin/mysql.sh
keepalived 启动systemctl start keepalived