树莓派Debian Mysql多主一从数据同步总结记录
Mysql的多主一从相关配置参考之前的Blog,不再细述,下面主要是解决这次在树莓派上同步时所出现的问题,及解决方案。
在树莓派下安装Mysql服务,apt-get update & apt-get mysql-server
默认安装为5.5版本的Mysql。
修改/etc/mysql/my.cnf配置,创建两个新的实例,这里主要出现几个问题。
1.生成新的实例时使用--basedir路径导致找不到my_print_defaults
2.实例mysqld1无法运行,默认运行原本的实例,导致无法在指定目录下生成mysqld.sock。(最主要的问题)
3.Mysql5.5运行实例不支持--config-file,出现找不到--config-file报错
第一个问题解决方案:
1、进入mysql安装目录,使用--basedir的相对路径
2、使用默认my.cnf下的--basedir /usr/bin/mysql_install_db --datadir=/home/mysql/data1/ --user=mysql
3、找到my_print_defaults,使用软链接如:
剩下的小问题均是由问题2引起,主要解决掉问题2,就可以了,在这也做一个小总结
刚刚开始以新建的实例1已成功运行,但是根据sock连接缺发现指定路径上不存在,mysqld.sock
查找mysqld.sock存在路径
find / -name mysqld.sock 找到该路径为:/run/mysqld/mysqld.sock
访问实例
- +---------------+-------+
- | Variable_name | Value |
- +---------------+-------+
- | server_id |0 |
- +---------------+-------+
发现service_id为0,其实也就说明了my.cnf上的实例1配置其实是无效的,只是我还是不死心,报有一线希望(当时并未发现启动的其实并非实例1)
通过sql语句修改全局server_id,SET GLOBAL server_id=20;再次运行slave start;成功。
但是问题来了,每次机器重启server_id都会被重置为0,导致无法同步。
试着查看service mysql stats(如实例1运行成功默认的将会被关闭)发现
● mysql.service - LSB: Start and stop the mysql database server daemon
Loaded: loaded (/etc/init.d/mysql)
Active: active (running) since Tue 2017-02-28 01:26:36 UTC; 2s ago
Process: 3400 ExecStart=/etc/init.d/mysql start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/mysql.service
├─775 /bin/sh /usr/bin/mysqld_safe
├─861 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --pid-file=/var/lib/mysql/raspberrypi.pid
└─862 logger -t mysqld -p daemon.error
WHAT THE FUCK?
默认的实例还在运行,这是什么鬼,终于找到问题所在
第二个问题的解决方案:
1、修改mysql.service运行的实例路径,--datadir指向实例1的路径
2、直接删除mysql.service,或禁止开机启动
3、修改my.cnf下实例1【mysqld1】socket,及pid-file为原本实例的路径/run/mysqld/
4、如果以上都不行,请直接走终极解决方案...创建实例3吧,或者如果有更好的方案,请告知,让我也学习学习
关闭默认实例service mysql stop;
运行实例一:/usr/bin/mysqld_multi --config-file=/etc/mysql/my.cnf start 1
报错:
Unknown option: config-file
Error with an option, see mysqld_multi --help for more info.
Mysql5.6以下不支持--config-file,使用--defaults-extra-file代替
第三个问题解决方案:
重新运行:/usr/bin/mysqld_multi --defaults-extra-file=/etc/mysql/my.cnf start 1
启动成功,登入实例1:mysql -uroot -p -P3306 -S /run/mysqld/mysqld.sock查询server_id是否为my.cnf设置的值,
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 20 |
+---------------+-------+
正确,重新设置同步,成功。
此次总结告一段落,主要的坑还是问题2。