Full Code of bennojoy/mysql for AI

master 9a8fe58d227f cached
12 files
10.7 KB
3.2k tokens
1 requests
Download .txt
Repository: bennojoy/mysql
Branch: master
Commit: 9a8fe58d227f
Files: 12
Total size: 10.7 KB

Directory structure:
gitextract_bn4uk6yi/

├── README.md
├── defaults/
│   └── main.yml
├── handlers/
│   └── main.yml
├── meta/
│   └── main.yml
├── tasks/
│   └── main.yml
├── templates/
│   ├── .my.cnf.j2
│   ├── my.cnf.Debian.j2
│   ├── my.cnf.RedHat.j2
│   └── mysql.cnf.j2
└── vars/
    ├── Debian.yml
    ├── RedHat.yml
    └── main.yml

================================================
FILE CONTENTS
================================================

================================================
FILE: README.md
================================================
MySQL Server
============

This roles helps to install MySQL Server across RHEL and Ubuntu variants.
Apart from installing the MySQL Server, it applies basic hardening, like
securing the root account with password, and removing test databases. The role
can also be used to add databases to the MySQL server and create users in the
database. It also supports configuring the databases for replication--both
master and slave can be configured via this role.

Requirements
------------

This role requires Ansible 1.4 or higher, and platform requirements are listed
in the metadata file.

Role Variables
--------------

The variables that can be passed to this role and a brief description about
them are as follows:

      mysql_port: 3306                 # The port for mysql server to listen
      mysql_bind_address: "0.0.0.0"    # The bind address for mysql server
      mysql_root_db_pass: foobar       # The root DB password

      # A list that has all the databases to be
      # created and their replication status:
      mysql_db:                                 
           - name: foo
             replicate: yes
           - name: bar
             replicate: no

      # A list of the mysql users to be created
      # and their password and privileges:
      mysql_users:                              
           - name: benz
             pass: foobar
             priv: "*.*:ALL"

      # If the database is replicated the users
      # to be used for replication:
      mysql_repl_user:                          
        - name: repl
          pass: foobar

      # The role of this server in replication:
      mysql_repl_role: master

      # A unique id for the mysql server (used in replication):
      mysql_db_id: 7

Examples
--------

1) Install MySQL Server and set the root password, but don't create any
database or users.

      - hosts: all
        roles:
        - {role: mysql, mysql_root_db_pass: foobar, mysql_db: none, mysql_users: none }

2) Install MySQL Server and create 2 databases and 2 users.

      - hosts: all
        roles:
         - {role: mysql, mysql_db: [{name: benz},
                                    {name: benz2}],
            mysql_users: [{name: ben3, pass: foobar, priv: "*.*:ALL"},
                          {name: ben2, pass: foo}] }

Note: If users are specified and password/privileges are not specified, then
default values are set.

3) Install MySQL Server and create 2 databases and 2 users and configure the
database as replication master with one database configured for replication.

      - hosts: all
        roles:
         - {role: mysql, mysql_db: [{name: benz, replicate: yes },
                                    { name: benz2, replicate: no}], 
                         mysql_users: [{name: ben3, pass: foobar, priv: "*.*:ALL"},
                                       {name: ben2, pass: foo}],
                         mysql_repl_user: [{name: repl, pass: foobar}] }

4) A fully installed/configured MySQL Server with master and slave
replication.

      - hosts: master
        roles:
         - {role: mysql, mysql_db: [{name: benz}, {name: benz2}],
                         mysql_users: [{name: ben3, pass: foobar, priv: "*.*:ALL"},
                                       {name: ben2, pass: foo}],
                         mysql_db_id: 8 }

      - hosts: slave
        roles:
         - {role: mysql, mysql_db: none, mysql_users: none,
                  mysql_repl_role: slave, mysql_repl_master: vm2,
                  mysql_db_id: 9, mysql_repl_user: [{name: repl, pass: foobar}] }

Note: When configuring the full replication please make sure the master is
configured via this role and the master is available in inventory and facts
have been gathered for master. The replication tasks assume the database is
new and has no data.


Dependencies
------------

None

License
-------

BSD

Author Information
------------------

Benno Joy
 



================================================
FILE: defaults/main.yml
================================================
---

mysql_port: 3306
mysql_bind_address: "0.0.0.0"
mysql_root_db_pass: foobar

mysql_db:
     - name: foo
       replicate: yes
     - name: bar
       replicate: no

mysql_users:
     - name: benz
       pass: foobar
       priv: "*.*:ALL"

mysql_repl_user:
  - name: repl
    pass: foobar

mysql_repl_role: master
mysql_db_id: 7

mysql_sql_mode: STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

================================================
FILE: handlers/main.yml
================================================
---
- name: restart mysql
  service: name={{ mysql_service }} state=restarted 


================================================
FILE: meta/main.yml
================================================
---
galaxy_info:
  author: "Benno Joy"
  company: AnsibleWorks
  license: license (BSD)
  min_ansible_version: 1.4 
  platforms:
   - name: EL
     versions:
      - 5
      - 6
   - name: Fedora
     versions:
      - 16
      - 17
      - 18
   - name: Ubuntu
     versions:
      - precise
      - quantal
      - raring
      - saucy
  categories:
   - database:sql
dependencies: []
  


================================================
FILE: tasks/main.yml
================================================
---
- name: Add the OS specific variables
  include_vars: "{{ ansible_os_family }}.yml"

- name: Install the mysql packages in Redhat derivatives
  yum: name={{ item }} state=installed
  with_items:
    - "{{ mysql_pkgs }}"
  when: ansible_os_family == 'RedHat'

- name: Install the mysql packages in Debian derivatives
  apt: name={{ item }} state=installed update_cache=yes
  with_items:
    - "{{ mysql_pkgs }}"
  environment: "{{ env }}"
  when: ansible_os_family == 'Debian'

- name: Copy the my.cnf file
  template: src=my.cnf.{{ ansible_os_family }}.j2 dest={{ mysql_conf_dir }}/my.cnf
  notify:
   - restart mysql

- name: Create the directory /etc/mysql/conf.d
  file: path=/etc/mysql/conf.d state=directory
  notify:
   - restart mysql

- name: Deploy mysql config to conf.d
  template: src=mysql.cnf.j2 dest=/etc/mysql/conf.d/mysql.cnf
  notify:
    - restart mysql

- name: Start the mysql services
  service: name={{ mysql_service }} state=started enabled=yes

- name: update mysql root password for all root accounts
  mysql_user: name=root host={{ item }} password={{ mysql_root_db_pass }}
  with_items:
   - "{{ ansible_hostname }}"
   - 127.0.0.1
   - ::1
   - localhost
  when: ansible_hostname != 'localhost'

- name: update mysql root password for all root accounts
  mysql_user: name=root host={{ item }} password={{ mysql_root_db_pass }}
  with_items:
   - 127.0.0.1
   - ::1
   - localhost
  when: ansible_hostname == 'localhost'

- name: copy .my.cnf file with root password credentials
  template: src=.my.cnf.j2 dest=~/.my.cnf mode=0600

- name: ensure anonymous users are not in the database
  mysql_user: name='' host={{ item }} state=absent
  with_items:
   - localhost
   - "{{ ansible_hostname }}"

- name: remove the test database
  mysql_db: name=test state=absent

- name: Create the database's
  mysql_db: name={{ item.name }} state=present
  with_items:
    - "{{ mysql_db }}"
  when: mysql_db|lower() != 'none'

- name: Create the database users
  mysql_user: name={{ item.name }}  password={{ item.pass|default("foobar") }}
                priv={{ item.priv|default("*.*:ALL") }} state=present host={{ item.host | default("localhost") }}
  with_items:
    - "{{ mysql_users }}"
  when: mysql_users|lower() != 'none'

- name: Create the replication users
  mysql_user: name={{ item.name }}  host="%" password={{ item.pass|default("foobar") }}
                priv="*.*:REPLICATION SLAVE" state=present
  with_items:
    - "{{ mysql_repl_user }}"
  when: mysql_repl_role == 'master'

- name: Check if slave is already configured for replication
  mysql_replication: mode=getslave
  ignore_errors: true
  register: slave
  when: mysql_repl_role == 'slave'

- name: Ensure the hostname entry for master is available for the client.
  lineinfile: dest=/etc/hosts regexp="{{ mysql_repl_master }}" line="{{ hostvars[mysql_repl_master].ansible_default_ipv4.address + "   " + mysql_repl_master }}" state=present
  when: slave|failed and mysql_repl_role == 'slave' and mysql_repl_master is defined

- name: Get the current master servers replication status
  mysql_replication: mode=getmaster
  delegate_to: "{{ mysql_repl_master }}"
  register: repl_stat
  when: slave|failed and mysql_repl_role == 'slave' and mysql_repl_master is defined

- name: Change the master in slave to start the replication
  mysql_replication: mode=changemaster master_host={{ mysql_repl_master }} master_log_file={{ repl_stat.File }} master_log_pos={{ repl_stat.Position }} master_user={{ mysql_repl_user[0].name }} master_password={{ mysql_repl_user[0].pass }}
  when: slave|failed and mysql_repl_role == 'slave' and mysql_repl_master is defined




================================================
FILE: templates/.my.cnf.j2
================================================
[client]
user=root
password={{ mysql_root_db_pass }}


================================================
FILE: templates/my.cnf.Debian.j2
================================================
#
# The MySQL database server configuration file.
#
[client]
port		= {{ mysql_port }}
socket		= /var/run/mysqld/mysqld.sock

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket		= /var/run/mysqld/mysqld.sock
nice		= 0

[mysqld]
user		= mysql
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
port		= {{ mysql_port }}
basedir		= /usr
datadir		= /var/lib/mysql
tmpdir		= /tmp
lc-messages-dir	= /usr/share/mysql
skip-external-locking

bind-address		= {{ mysql_bind_address }}

#key_buffer		= 16M
max_allowed_packet	= 16M
thread_stack		= 192K
thread_cache_size       = 8

query_cache_limit	= 1M
query_cache_size        = 16M
log_error = /var/log/mysql/error.log
server-id               = {{ mysql_db_id }}

{% if mysql_repl_role == 'master' %}
log_bin                 = mysql-bin
expire_logs_days        = 10
max_binlog_size         = 100M

{% if mysql_db is iterable and mysql_db is not string %}
{% for i in mysql_db %}
{% if i.replicate|default(1) %}
binlog_do_db            = {{ i.name }}
{% endif %}
{% endfor %}

{% for i in mysql_db %}
{% if not i.replicate|default(1) %}
binlog_ignore_db        = {{ i.name }}
{% endif %}
{% endfor %}
{% endif %}
{% endif %}

!includedir /etc/mysql/conf.d/


================================================
FILE: templates/my.cnf.RedHat.j2
================================================
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
port={{ mysql_port }}
bind-address={{ mysql_bind_address }}
server-id               = {{ mysql_db_id }}

{% if mysql_repl_role == 'master' %}
log_bin                 = mysql-bin
expire_logs_days        = 10
max_binlog_size         = 100M

{% for i in mysql_db %}
{% if i.replicate|default(1) %}
binlog_do_db            = {{ i.name }}
{% endif %}
{% endfor %}

{% for i in mysql_db %}
{% if not i.replicate|default(1) %}
binlog_ignore_db        = {{ i.name }}
{% endif %}
{% endfor %}
{% endif %}

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

!includedir /etc/mysql/conf.d/


================================================
FILE: templates/mysql.cnf.j2
================================================
[mysqld]
sql_mode={{ mysql_sql_mode }}

================================================
FILE: vars/Debian.yml
================================================
---

mysql_pkgs:
  - python-selinux
  - mysql-server
  - python-mysqldb

mysql_service: mysql
mysql_conf_dir: "/etc/mysql/"


================================================
FILE: vars/RedHat.yml
================================================
---
mysql_pkgs:
  - libselinux-python
  - mysql-server
  - MySQL-python

mysql_service: mysqld

mysql_conf_dir: "/etc/"


================================================
FILE: vars/main.yml
================================================
---
env:
 RUNLEVEL: 1

Download .txt
gitextract_bn4uk6yi/

├── README.md
├── defaults/
│   └── main.yml
├── handlers/
│   └── main.yml
├── meta/
│   └── main.yml
├── tasks/
│   └── main.yml
├── templates/
│   ├── .my.cnf.j2
│   ├── my.cnf.Debian.j2
│   ├── my.cnf.RedHat.j2
│   └── mysql.cnf.j2
└── vars/
    ├── Debian.yml
    ├── RedHat.yml
    └── main.yml
Condensed preview — 12 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (12K chars).
[
  {
    "path": "README.md",
    "chars": 3922,
    "preview": "MySQL Server\n============\n\nThis roles helps to install MySQL Server across RHEL and Ubuntu variants.\nApart from installi"
  },
  {
    "path": "defaults/main.yml",
    "chars": 467,
    "preview": "---\n\nmysql_port: 3306\nmysql_bind_address: \"0.0.0.0\"\nmysql_root_db_pass: foobar\n\nmysql_db:\n     - name: foo\n       replic"
  },
  {
    "path": "handlers/main.yml",
    "chars": 79,
    "preview": "---\n- name: restart mysql\n  service: name={{ mysql_service }} state=restarted \n"
  },
  {
    "path": "meta/main.yml",
    "chars": 390,
    "preview": "---\ngalaxy_info:\n  author: \"Benno Joy\"\n  company: AnsibleWorks\n  license: license (BSD)\n  min_ansible_version: 1.4 \n  pl"
  },
  {
    "path": "tasks/main.yml",
    "chars": 3657,
    "preview": "---\n- name: Add the OS specific variables\n  include_vars: \"{{ ansible_os_family }}.yml\"\n\n- name: Install the mysql packa"
  },
  {
    "path": "templates/.my.cnf.j2",
    "chars": 53,
    "preview": "[client]\nuser=root\npassword={{ mysql_root_db_pass }}\n"
  },
  {
    "path": "templates/my.cnf.Debian.j2",
    "chars": 1270,
    "preview": "#\n# The MySQL database server configuration file.\n#\n[client]\nport\t\t= {{ mysql_port }}\nsocket\t\t= /var/run/mysqld/mysqld.s"
  },
  {
    "path": "templates/my.cnf.RedHat.j2",
    "chars": 779,
    "preview": "[mysqld]\ndatadir=/var/lib/mysql\nsocket=/var/lib/mysql/mysql.sock\nuser=mysql\n# Disabling symbolic-links is recommended to"
  },
  {
    "path": "templates/mysql.cnf.j2",
    "chars": 38,
    "preview": "[mysqld]\nsql_mode={{ mysql_sql_mode }}"
  },
  {
    "path": "vars/Debian.yml",
    "chars": 124,
    "preview": "---\n\nmysql_pkgs:\n  - python-selinux\n  - mysql-server\n  - python-mysqldb\n\nmysql_service: mysql\nmysql_conf_dir: \"/etc/mysq"
  },
  {
    "path": "vars/RedHat.yml",
    "chars": 120,
    "preview": "---\nmysql_pkgs:\n  - libselinux-python\n  - mysql-server\n  - MySQL-python\n\nmysql_service: mysqld\n\nmysql_conf_dir: \"/etc/\"\n"
  },
  {
    "path": "vars/main.yml",
    "chars": 23,
    "preview": "---\nenv:\n RUNLEVEL: 1\n\n"
  }
]

About this extraction

This page contains the full source code of the bennojoy/mysql GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 12 files (10.7 KB), approximately 3.2k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!