前言
首先机器上已经有了一台mysql服务,找到mysql的安装位置复制一份。
主数据库修改
修改my.cnf
将/etc/my.cnf修改为:
[mysql]
# 设置mysql客户端默认字符集
#
default-character-set=utf8
#
[mysqld]
#
skip-name-resolve
#
# #设置3307端口
#
port = 3307
#设置socket文件位置(重点)
socket=/usr/local/mysql/data/mysql.sock
#设置mysqlx socket文件位置(重点)
mysqlx_socket=/usr/local/mysql/data/mysqlx.sock
#设置mysqlx 的端口(重点)
mysqlx_port = 33060
#设置默认密码的加密方式,只会影响新增密码或者修改密码
default_authentication_plugin=mysql_native_password
#设置server_id,和从数据库不一样就可以(重点)
server_id = 5
# # 设置mysql的安装目录
#
basedir=/usr/local/mysql
#
# # 设置mysql数据库的数据的存放目录
#
datadir=/usr/local/mysql/data
# # 允许最大连接数
max_connections=200
#
# # 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# # 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
这样做的目的是指定端口和文件,防止和从数据库冲突,导致起不来
使用命令安全关闭mysql
./mysqladmin -uroot -p123456 shutdown
然后重新启动:
./mysqld_safe --defaults-file=/etc/my.cnf &
复制mysql
本机器mysql安装位置是:/usr/local/mysql,使用命令复制出来一份:
cp -R /usr/local/mysql /usr/local/mysql3308
然后修改文件夹所在组:
chown -R mysql:mysql /usr/local/mysql3308
最好修改下文件夹权限:
chmod -R 755 /usr/local/mysql3308
复制一份配置文件,默认配置文件在/etc/my.cnf
cp /etc/my.cnf /etc/my3308.cnf
编辑my3308.cnf,将内容改成如下:
[mysql]
# 设置mysql客户端默认字符集
#
default-character-set=utf8
#
[mysqld]
#设置socket文件位置(重点)
socket=/usr/local/mysql3308/data/mysql.sock
#设置mysqlx socket文件位置(重点)
mysqlx_socket=/usr/local/mysql3308/data/mysqlx.sock
#设置mysqlx 的端口(重点)
mysqlx_port = 33070
#设置server_id,和主数据库不一样就可以(重点)
server_id = 18
#设置3308端口
port = 3308
#
default_authentication_plugin=mysql_native_password
# # 设置mysql的安装目录
#
basedir=/usr/local/mysql3308
#
# # 设置mysql数据库的数据的存放目录
#
datadir=/usr/local/mysql3308/data
# # 允许最大连接数
max_connections=200
#
# # 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# # 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
初始化mysql
使用新的mysql程序初始化数据库
/usr/local/mysql3308/bin/mysqld --defaults-file=/etc/my3308.cnf --initialize --user=mysql --basedir=/usr/local/mysql3308 --datadir=/usr/local/mysql3308/data
初始化之后,会提醒初始化成功,并提示初始化密码。
修改/usr/local/mysql3308/data/auto.cnf里面的值,将里面的uuid改一下,然后保存。
注意:要设置data目录所属用户为mysql
chown mysql.mysql -R ./data
这个时候还没有启动mysql,可以使用命令:
./mysqld_safe --defaults-file=/etc/my3308.cnf &
启动mysql报错,请看data下面err后缀的文件内容
查看是否启动成功:
ss -tnl
登录到主mysql
进入到主mysql:
./mysql -S /usr/local/mysql/data/mysql.sock -u root -p
创建数据库同步用户:(必须为IP地址,localhost连不上)
CREATE USER 'repl'@'123.57.44.85' IDENTIFIED BY 'slavepass';
授权:
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'123.57.44.85';
flush privileges;
登录到从mysql
进入到mysql3308/bin目录下,执行:
./mysql -S /usr/local/mysql3308/data/mysql.sock -u root -p
登录到mysql,修改原始密码。
因为我们只需要root本地登录,所以可以把密码改的简单点:
alter user 'root'@'localhost' identified by '123456';
设置mysql主从
需要同时登录主数据库和从数据库
主数据库
查询master状态:
show master status;
会显示:
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 | 2734 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
接下来就不要操作主mysql,防止状态值发生变化。(mysql不能有任何操作,不然Position会变化)
从数据库
执行
CHANGE MASTER TO MASTER_HOST='182.92.172.80',MASTER_USER='rep1',MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=2734;
master_log_file为主mysql显示File,pos是Position。
开启slave:
start slave;
查看slave状态:
show slave status\G
主要看两个参数,一个是Slave_IO_Running,另一个是Slave_SQL_Running。两个都为yes,才代表mysql主从开启成功。
注意事项
如果想停止mysql,首先登录到从数据库,运行命令去停止主从复制:
stop slave;
然后再运行
CHANGE MASTER TO MASTER_HOST='182.92.172.80',MASTER_USER='rep1',MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=2734;
再恢复同步
start slave;
如果出现问题,可以重置同步
首先去从数据库停止同步:
stop slave;
主数据库执行:
reset maseter;
从数据库执行:
reset slave;
然后看主数据库的master:
show master status;
根据状态在从数据库中运行:
CHANGE MASTER TO MASTER_HOST='182.92.172.80',MASTER_USER='rep1',MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=2734;
然后在从数据库中开启同步:
start slave;
同步设置同步哪些数据库
在主数据库/etc/my.cnf中写:
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game