miércoles, 29 de julio de 2015

Útiles GNU/Linux

  • Montar una imagen CD/DVD Nero:
    mount -o loop,offset=307200 imagen.nrg /punto/de/montaje
     
  • Arreglar grub: después de volver a cargar mi imagen de partición de sistema con Clonezilla, puede que el grub deje de funcionar. Para arreglarlo hay 2 formas:
  1. Arrancar con LiveCD, montar la partición donde está el Grub, reasignar la raíz activa a ese directorio y reinstalar grub ahí:
    sudo mkdir /mnt/raiz
    sudo mount /dev/sda4oloquesea /mnt/raiz
    sudo chroot /mnt/raiz
    sudo grub-install /dev/sda4
  2. Arrancar con SuperGrubDisk => se detecta el grub dañado y permite que arranquemos nuestro sistema normalmente. Después arreglamos el Grub de forma permanente:
    sudo grub-install /dev/sda4
  • Para evitar que la consola SSH remota se congele, editar /etc/ssh/ssh_config y añadir ServerAliveInterval 30
  • Para cambiar el nombre de la máquina por XXXX: sudo hostnamectl set-hostname XXXX (y después sudo nano /etc/hosts)
  • ejecutar el último comando como root: sudo !!

  • Alias interactivo: alias cp='cp -i' alias mv='mv -i' alias rm='rm -i'
  • Alias cómodo: alias mkgz="tar -cvzf" alias untar="tar -xvzf"
  • Para que funcionen los alias con sudo hay que convertirlo a él mismo en un alias: alias sudo='sudo '
  • Función alias: crear ~/.bash_aliases con: ghist() { history | grep -F $1 | grep -Fv ghist | tail -n 12; }
  • Sincronizar directorios local y remoto: rsync -avz /var/dir/ user@server:/var/ 
  • Si nos olvidamos de usar nohup, podemos "desligar" un proceso background a posteriori con disown jobID

  • Crear directorios anidados: mkdir -p tmp/foo/bar 
  • Alternar entre 2 directorios: cd -

  • Escribir comando de varias líneas: fc
  • Averiguar IP externa: curl ipconfig.me  curl ipconfig.me/ip
  • Tabla Ascii: man ascii
  • Colores en Xterm Bash: editamos .bashrc descomentando 'force_color_prompt=yes' y modificamos PS1 de 'if [ "$color_prompt" = yes ];' para que sea cómodo pero no molesto: PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]@\[\033[01;34m\]\h\[\033[00m\]:\w\$ '. Para PC local se puede usar otro color para el servidor (p.e. \[\033[01;33m\]\h) y para usuario root recomiendo modificar su .bashrc con otro color en el usuario, para que salte a la vista que estamos como root: PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u...'.
  • Paquetes útiles: synaptic, gdebi-core, htop, nload, git, diffuse, bless, g++, apt-show-versions, nautilus-open-folder, openvpn, network-manager-openvpn, python-tk, python-dev, python-setuptools
  •  SSH Port-Forwarding para mantenimiento en vez de configurar OpenVPN:
    ssh -L 3301:127.0.0.1:3306 ubuntu@myserver... permite acceder a Mysql como si estuviéramos en local mientras no salgamos de esa sesión (no basta solo con --port=3301, también es necesario --host=127.0.0.1)

jueves, 18 de junio de 2015

MultiMySQL

Guide to run multiplie MySQL instances on same Ubuntu 14.04 Server.
Based mainly on http://java.dzone.com/articles/mysqldmulti-how-run-multiple.

We have an instance, that will "rename" to 'mysql0', and we'll add another one: 'mysql3307'.

/etc/init.d/mysql stop

sudo mv /etc/init.d/mysql /etc/init.d/mysql_mono.server (backup)
sudo cp /usr/share/mysql/mysqld_multi.server /etc/init.d/mysql

edit /etc/init.d/mysql, then find the lines:
  • basedir=/usr/local/mysql
  • bindir=/usr/local/mysql/bin
and change to:
  • basedir=/usr
  • bindir=/usr/bin
sudo cp -p /etc/mysql/my.cnf /etc/my.cnf.mono (backup)
edit /etc/mysql/my.cnf to rename [mysqld] to [mysqld0] and to add [mysqld3307] (changes pid-file, socket, port and datadir; also logdir, serverid...)

Also add this to /etc/mysql/my.cnf:
    [mysqld_multi]
    mysqld     = /usr/bin/mysqld_safe
    mysqladmin = /usr/bin/mysqladmin
    user       = multi_admin
    password   = multipass

put additional rules to deal with 3307 file/dirs in the application firewall /etc/apparmor.d/local/usr.sbin.mysqld (https://github.com/naveensnayak/mysql-multi/blob/master/usr.sbin.mysqld) or /etc/apparmor.d/usr.sbin.mysqld?
sudo service apparmor reload

sudo mysql_install_db -verbose --user=mysql --datadir=/var/lib/mysql3307

sudo mkdir /var/log/mysql3307
sudo chown mysql:mysql /var/log/mysql3307
Better rename log files in /var/log/mysql instead of create a new dir with same file names?

sudo /etc/init.d/mysql start 0 (mysqladmin -h 127.0.0.1 --port=3306 -u root start)
mysql -h 127.0.0.1 --port=3306 -u root -p
  • mysql> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
  • mysql> FLUSH PRIVILEGES;

repeat GRANT for mysql3307 connection [mysql -h 127.0.0.1 --port=3307 -u root -p (empty password)]
and give root a password:
    mysql> update mysql.user set password=PASSWORD('myRootPassword') where User='root'; flush privileges;

Manage instances:
  • sudo mysqld_multi report
  • sudo mysqld_multi start 3307
  • sudo mysqld_multi stop 0,3307

This is to make client access easier:
    create /usr/sbin/mysql3307, and put the following lines on it:
        #!/bin/bash
        mysql --socket=/var/run/mysqld3307.sock $1 $2 $3 $4 $5 $6 $7 $8
    (maybe better with: mysql -h 127.0.0.1 --port=3307 $1 $2 $3 $4 $5 $6 $7 $8)
    sudo chmod a+x /usr/sbin/mysql3307

    # mysql3307
    mysql> select @@server_id;

Finally make sure instances are loaded automatically at startup.

--------------

If you want the new instance to be a slave of a master in another server, you can follow this:
http://java.dzone.com/articles/mysqldmulti-how-run-multiple (this related: http://dba.stackexchange.com/questions/41050/is-it-safe-to-delete-mysql-bin-files)