2017年2月

树莓派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,使用软链接如:

ln -s /usr/local/mysql/bin/my_print_defaults /usr/bin/
重新运行/usr/bin/mysql_install_db --basedir=/usr/bin --datadir=/home/mysql/data2/ --user=mysql

 

 

 

剩下的小问题均是由问题2引起,主要解决掉问题2,就可以了,在这也做一个小总结

刚刚开始以新建的实例1已成功运行,但是根据sock连接缺发现指定路径上不存在,mysqld.sock

查找mysqld.sock存在路径

find / -name mysqld.sock 找到该路径为:/run/mysqld/mysqld.sock

访问实例

/usr/bin/mysql -uroot -p123456 -P3306 -S /run/mysqld/mysqld.sock(这里是坑,我以为是新的实例1,其实并不是,而是默认的/var/lib/mysql
发现居然能用旧密码登录,登陆后开始进行同步,
slave stop;
CHANGE MASTER TO MASTER_HOST='104.168.26.50',MASTER_PORT=3306,MASTER_USER='root',MASTER_PASSWORD='q250305917',MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=107;
以上两句均为正常,但是slave start;时报错,抛出一个无法改变master状态的错误,
查询server_id,show variables like '%server_id%';  

  • +---------------+-------+
  • | 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

启动成功,登入实例1mysql -uroot -p -P3306 -S /run/mysqld/mysqld.sock查询server_id是否为my.cnf设置的值,

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 20 |
+---------------+-------+

正确,重新设置同步,成功。

 

此次总结告一段落,主要的坑还是问题2。

nginx+php解析PHP文件空白时测试方案

检查php-fpm是否启动正常:ps aux | grep php-fpm
检查vhost.conf文件中配置的php环境是否正确,
fastcgi_pass 为127.0.0.1:9000;unix:/var/run/php5-fpm.sock;
检查php5-fpm.sock路径是否存在,检查include文件的文件路径是否正常
按照下面步骤修改
cd /etc/nginx/
sudo  nanofastcgi_params
查看是否有下面两行,没有就添加
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO                $fastcgi_script_name;
或者添加至vhost.conf,中如:
location ~ .*\.php(\/.*)*$ {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

树莓派之使用命令启动wifi

此方法经适用于树莓派3或已安装好无线驱动的树莓派 pi 和树莓派2

 

登录树莓派后输入命令:iwlist scan  查询所扫面到的wifi信号,确定准备连接ssid在扫描列表内

[方法一]

如下:

Cell 03 - Address: 54:36:9B:07:9E:CE
Channel:13
Frequency:2.472 GHz (Channel 13)
Quality=70/70 Signal level=-26 dBm
Encryption key:on
ESSID:"1024"
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
18 Mb/s; 36 Mb/s; 54 Mb/s
Bit Rates:6 Mb/s; 12 Mb/s; 24 Mb/s; 48 Mb/s
Mode:Master
Extra:tsf=0000000000000000
Extra: Last beacon: 90ms ago
IE: Unknown: 000431303234
IE: Unknown: 010882848B961224486C
IE: Unknown: 03010D
IE: Unknown: 32048C98B060
IE: Unknown: 0706434E20010D14
IE: Unknown: 050400010000
IE: Unknown: 2A0100
IE: Unknown: 2D1AEE1117FFFF000001000000000000000000000000000000000000
IE: Unknown: 3D160D070600000000000000000000000000000000000000
IE: IEEE 802.11i/WPA2 Version 1
Group Cipher : CCMP
Pairwise Ciphers (1) : CCMP
Authentication Suites (1) : PSK
IE: Unknown: DD180050F2020101800003A4000027A4000042435E0062322F00
IE: Unknown: DD07000C4303000000

 

编辑wifi文件
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
在该文件最后添加下面的话
network={
  ssid="1024"
  psk="password"
}
# 引号部分分别为wifi的名字和密码
# 保存文件后几秒钟应该就会自动连接到该wifi
# 查看是否连接成功
ifconfigwlan0

[方法二]

修改/etc/network/interface文件

auto lo

iface lo inet loopback

iface eth0 inet dhcp

auto wlan0

allow-hotplug wlan0

iface wlan0 inet dhcp

wpa-ssid   接入AP的名字

wpa-psk   接入AP的密码

保存文件,然后运行如下命令重新启动网络!

sudo /etc/init.d/networking restart

关于树莓派开机启动ngrok

编辑以下文档

nano /etc/systemd/system/ngrok.service

输入以下内容:

[Unit]
Description=ngrok
After=network.target

[Service]
Type=simple
ExecStart=/home/pi/proj/ngrok/ngrok -config=/home/pi/proj/ngrok/ngrok.cfg start http ssh

[Install]
WantedBy=multc-user.target

测试能否正常启动:

sudo systemctl start ngrok
systemctl status ngrok

如果显示绿色active (runining)就说明启动正常了。这时再输入:

sudo systemctl enable ngrok

即可设置开机自动启动。

树莓派开机启动SSH及开机脚本

此教程针对树莓派官方11月份后更新的系统,11月份前的开机自启无需修改,由于树莓派官方称考虑到SSH安全性问题,特将11月份后更新的启动关闭了SSH启动,以下分别以raspberry os && debian 和ubuntu mate做介绍

1:raspberry os && debian,较为简单只需要在/boot目录下新建一个空白的SSH文件,连接上SSH后重启系统即可

2:ubuntu mate稍微复杂,需要更改为root自动登录系统,将service ssh start加入到开机脚本中/etc/rc.local

 

关于raspberry os && debian新的开机脚本

Jessie版(新的Raspbian系统都是这个)

nano /etc/systemd/system/ngrok.service